대입연산자오버로딩 주의할점(소스)

//////////////////////////////////////////////////
//
// 수업 1
//
// 대입 연산자 (오버로딩 심화 공부)
//
//////////////////////////////////////////////////

대입연산자오버로딩은 보통 사용자정의 클래스에 기본형을 대입하는것을 하기 위해쓴다!!!!!

class SK{
int m_a;
};

SK = 10; // 이런식을 하기위해 쓴다!

 이렇게 할때는 대입연산자오버로딩함수 부분에서 &T타입으로 리턴해줘야 대입이 가능하다!!(중요)


 그렇다면 기본타입에 사용자정의 클래스를 대입하려면?
 => 기본타입 클래스를 건드릴수 없으므로 전역함수로 설정해줘야함!

 복사생성자와 대입연산자는 꼭 구별하자!!
 디폴트 복사생성자
 디폴트 대입연산자라는 것도 있다.
 둘다 기본적으로 얕은 복사를한다.
 둘의 차이점은 생성자는 초기화 시점 대입연산자는 대입시점에 호출됨.
[프로그래밍/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()
{
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(); //위와 마찬가지
}

이 글을 공유하기

댓글

Designed by JB FACTORY