대입연산자오버로딩 주의할점(소스)
- 프로그래밍/C++
- 2011. 4. 1. 11:23
//////////////////////////////////////////////////
//
// 수업 1
//
// 대입 연산자 (오버로딩 심화 공부)
//
//////////////////////////////////////////////////
대입연산자오버로딩은 보통 사용자정의 클래스에 기본형을 대입하는것을 하기 위해쓴다!!!!!
class SK{
int m_a;
};
SK = 10; // 이런식을 하기위해 쓴다!
이렇게 할때는 대입연산자오버로딩함수 부분에서 &T타입으로 리턴해줘야 대입이 가능하다!!(중요)
그렇다면 기본타입에 사용자정의 클래스를 대입하려면?
=> 기본타입 클래스를 건드릴수 없으므로 전역함수로 설정해줘야함!
복사생성자와 대입연산자는 꼭 구별하자!!
디폴트 복사생성자
디폴트 대입연산자라는 것도 있다.
둘다 기본적으로 얕은 복사를한다.
둘의 차이점은 생성자는 초기화 시점 대입연산자는 대입시점에 호출됨.
[프로그래밍/C++] - 복사생성자와 대입연산자의 차이
[프로그래밍/C++] - 복사생성자와 대입연산자의 차이
상속관계일때 대입관계를 유심히 생각해봐야한다.!
(오늘의 핵심내용)
상속관계 예제))
class First{
int m_a;
public:
First() : m_a(0) {}
First(int a) : m_a(a) {}
First& operator=(First& temp)
{
m_a = temp.m_a;
return *this;
}
};
class Second : public First{
int m_b;
public:
Second() : First(), m_b(0) {}
Second(int a, int b) : First(a), m_b(a) {}
};
void main()
{
}
void main()
{
First F1;
First F2;
Second S1;
Second S2;
F1 = S1; //F1의 디폴트대입연산자 호출됨
F2 = First(); //F2의 디폴트복사생성자 호출됨(임시객체사용)
S1 = S2; //S1의 디폴트 대입연산자 호출됨(부모의 대입연산자호출 아님)
F1 = S2; //F1의 대입연산자 호출되는데 상속개념이므로 대입이 가능함!
(대입연산자 부분에서 인자를 부모타입 &(레퍼런스)로 받기 때문이다!)
(대입연산자 부분에서 인자를 부모타입 &(레퍼런스)로 받기 때문이다!)
F2 = Second(); //위와 마찬가지
S1 = F1; //에러! 자식이 부모를 받으려함 (이런 상노무 시끼 ㅋㅋ)
S1 = First(); //위와 마찬가지
이 글을 공유하기