관리 메뉴
Automotive Software
연산자 중첩 본문
C++에서 내장형 데이터 타입에 대한 연산 외에 클래스(사용자 정의 타입)에 대한 연산을 가능하게 하는 문법
C를 기반으로 생각해보면 동일 구조체 타입 변수들의 멤버 간 연산을 위해
- 멤버 접근을 위한 함수를 만들거나
- 멤버 접근 연산자를 사용하여 일일이 접근방식을 기술하여야 함
중첩 가능한 연산자들 : 아래의 연산자를 제외한 대부분 연산자의 중첩 가능함
- The operators :: (scope resolution), . (member access), .* (member access through pointer to member), and ?: (ternary conditional) cannot be overloaded.(추가 내용 확인은 여기서)
- 범위 지정 연산자, 멤버 접근 연산자, 멤버 접근 포인터 연산자, 그리고 조건 연산자는 중첩이 불가능함
연산자 중첩 방법 : 키워드 operator 사용
- 전치 연산자(Prefix Operator) : 반환형 operator op ()
- 후치 연산자(Postfix Operator) : 반환형 operator op(정수형 매개 변수)
- 컴파일러가 전치와 후치를 구분하지 못하므로 이를 위해 정수형 매개 변수 제공
연산자 함수 구현 방법
- 클래스 멤버 함수로서 구현
- 외부 함수로서 구현 후 클래스에 프렌드 함수로 선언
class cMyClass
{
public:
cMyClass();
~cMyclass();
cMyClass operator++ ();
cMyClass operator++ (int);
private:
int memVar;
};
// 1. 전치 연산자
// 1.1 반환값 필요없는 경우
void operator++ () { ++memVar;}
// 1.2 반환값 필요한 경우 ; e.g.) cMyClass myCls2 = ++myCls1;
cMyClass operator++ ();
// 1.2.1 임시 객체 생성 후 사용
cMyClass cMyClass::operator++ ()
{
++memVar;
cMyClass tempClass;
tempClass.memVar = memVar;
return tempClass;
}
// 1.2.2 생성자 직접 호출을 통한 임시 객체 반환
cMyclass::cMyclass(int initVal): // 생성자 및 초기화
memVar(initVal)
{}
cMyClass cMyClass::operator++ ()
{
++memVar;
return cMyClass (memVar);
}
// 1.2.3 this 포인터 사용
// 클래스의 참조자를 반환하므로 추가 객체 생성 필요 없음
// 값을 전달하기만 하고 전달받는 함수에서 값 변경할 필요 없으니 상수(const)로 전달
// 클래스 내부 함수 선언시 타입 변경 필요
const cMyClass & cMyClass::operator++ ()
{
++memVar;
return *this;
}
// 2. 후치 연산자, 매개 변수가 전달되나 사용 안됨, 단지 후치 연산의 구분자 역활
cMyClass cMyClass::operator++ (int x)
{
// 현재값 임시저장
cMyClass tempCls(*this);
// 연산 처리
++memVar;
// 임시저장값 반환
return tempCls;
}
이 외에도 덧셈 연산자, 대입 연산자 그리고 변환 연산자도 중첩을 통해 클래스 연산을 위한 연산자로 사용할 수 있음
'프로그래밍 (Programming) > C++ (C Plus Plus) 기초' 카테고리의 다른 글
다형성 (Polymorphism) (0) | 2021.01.07 |
---|---|
상속 (Inheritance) (0) | 2021.01.02 |
객체 초기화 (0) | 2020.12.29 |
멤버함수 기본값 vs 멤버함수 중첩 (0) | 2020.12.28 |
참조자 (0) | 2020.12.28 |