해결된 질문
작성
·
213
0
class Simple
{
public:
Simple& operator=(const Simple& rhs)
{
if (this == &rhs)
return *this;
}
private:
int mNum = 1;
int mNum2 = 2;
int mNum3 = 3;
int mNum4 = 4;
int mNum5 = 5;
};
int num = 3;
int* ptr = #
cout << *ptr << endl;
int arr[10] = { 0 };
int* arrptr = arr;
cout << *arrptr << endl;
struct myStruct my;
struct myStruct* strptr = &my;
cout << *strptr << endl;
답변 1
1
1)
int number = 3;
int* ptr = &number;
라면 ptr은 int* 포인터 (주소 + int타입)이기 때문에
*ptr을 하면 역참조를 해서 실제로 3이라는 값을 의미합니다.
마찬가지로,
Simple a;
Simple* ptr = &a;
라면 ptr은 Simple* 포인터 (주소 + Simple 타입)이기 때문에
*ptr을 하면 역참조를 해서 실제로 Simple 이라는 구조체 값을 의미합니다.
딱 1개의 시작값이 아니라, Simple을 구성하는 int 5개가 모두 포함되는 풀박스 그 자체가 되는 것이죠.
마찬가지로 this는 Simple* 이기 때문에 그냥 주소값이고
*this를 하면 Simple 타입입니다.
오해하신 것처럼 [데이터멤버 첫번째 값 or 시작주소]가 아니며
[모든 데이터 멤버를 합친 Simple이라는 타입] 그 자체입니다.
Simple a;
Simple& b = a; // 참조
Simple c = a; // 복사
위는 사용법은 간단하죠? 사실 이거와 동일합니다.
Simple a; 대신 *this라고 생각하시면 됩니다.
Simple& b = *this;를 하면 복사가 되진 않고 참조를 하게 될 것이고
Simple b = *this;를 하면 실제 값을 복사하게 되겠죠.
2)
ostream operator<<에 대해 overloading이 필요한데 그건 일단 넘어가시기 바랍니다.