아래 코드를 살펴보면 Set 함수에서 멤버 변수 val에 파라미터로 넘어오는 값을 대입하고자 하는데 공교롭게도 val을 파라미터로 넘어오는 값으로 인식한다 val은 초기화가 안됐으므로 쓰레기값이 출력될거다.
#include <iostream>
using namespace std;
class Parent
{
int val;
public:
void Set(int val)
{
val = val;
}
int Get() const
{
return val;
}
};
int main()
{
Parent parent;
parent.Set(10);
cout << parent.Get() << endl;
return 0;
}
해당 부분을 this로 바꿔주면 정상 작동된다.
#include <iostream>
using namespace std;
class Parent
{
int val;
public:
void Set(int val)
{
//val = val;
this->val = val;
}
int Get() const
{
return val;
}
};
int main()
{
Parent parent;
parent.Set(10);
cout << parent.Get() << endl;
return 0;
}
생성자 일 때도 유용하게 쓰여진다.
#include <iostream>
using namespace std;
class Parent
{
int mVal = 0;
public:
Parent(int Val):mVal(Val)
{
cout << "기본 생성자 호출" << endl;
}
Parent(const Parent& Ref)
{
cout << "복사 생성자 호출" << endl;
this->mVal = Ref.GetVal();
}
~Parent()
{
cout << "소멸자 호출" << endl;
}
Parent& operator=(const Parent& Ref)
{
cout << "대입 연산자 오버로딩 호출" << endl;
if (*this != Ref)
this->mVal = Ref.GetVal();
return *this;
}
bool operator!=(const Parent& Ref)
{
return this->mVal != Ref.GetVal();
}
public:
int GetVal() const
{
return mVal;
}
void Print()
{
cout << "현재 값 : " << mVal << endl;
}
};
int main()
{
Parent* p1 = new Parent(5);
Parent p2(10), p3(15);
// 대입 연산자 오버로딩
p2.Print(); p3.Print();
p2 = p3;
p2.Print();
// 복사 생성자
Parent p5(p3);
p5.Print();
delete p1;
return 0;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 임시 객체 (Temporary Object) (0) | 2022.07.29 |
---|---|
C++ 부모 클래스 함수 호출과 오버라이딩 (override) (0) | 2022.07.28 |
C++ 추상 클래스 / 순수 가상 함수 (Pure Virtual Function) (0) | 2022.07.28 |
C++ 클래스 접근 제한자 (Access Modifier) (0) | 2022.07.27 |
C++ 스마트 포인터 (Smart Pointer) (0) | 2022.07.26 |