반응형
this
• 멤버함수 내에서만 사용
• 멤버함수 호출하는 개체 주소
• 멤버 함수는 호출시 this가 같이 전달 - this call 방식
• static 멤버 함수에서는 this 사용 불가
• friend함수, 전역함수에서 this 사용 불가
[this 예제]
#include <iostream>
class Point
{
int x, y;
public:
void set(int a, int b) // void set(Point* this, int a, int b)
{
x = a; // this->x = a;
y = b; // this->y = b;
}
};
int main()
{
Point p1, p2;
p1.set(20, 40); // 컴파일러에 의해 set(&p1, 20, 40) 으로 변경
}
this 사용되는 경우
• 멤버 데이터 명확히 하고 싶은 경우
• 멤버 함수를 연속적으로 호출 할 수 있다.
[예제]
#include <iostream>
class Count
{
int count = 0;
public:
void set(int count)
{
this->count = count;
}
};
int main()
{
Count c;
c.set(0);
}
[예제]
*this 반환시에는 참조(reference) 반환 필요
class Counter
{
int count = 0;
public:
void reset(int c = 0)
{
count = c;
}
Counter* inc()
{
++count;
return this;
}
Counter& dec()
{
--count;
return *this;
}
};
int main()
{
Counter c;
c.inc()->inc()->inc();
c.dec().dec().dec();
}
[예시] 연속 호출 필요성
Stream 구조체 통해 다양한 타입 출력
#include <stdio.h>
#include <iostream>
using namespace std;
struct Stream
{
void printf(int n);
void printf(char c);
void printf(double d);
void printf(const char* s);
};
void Stream::printf(int n)
{
::printf("%d", n);
}
void Stream::printf(char c)
{
::printf("%c", c);
}
void Stream::printf(double d)
{
::printf("%lf", d);
}
void Stream::printf(const char* s)
{
::printf("%s", s);
}
int main(void)
{
Stream c;
c.printf(5);
c.printf('A');
c.printf(3.14);
c.printf("seoul");
}
[예제] this 활용
객체를 반환받으면서 연쇄적으로 표현 가능
#include <stdio.h>
#include <iostream>
using namespace std;
struct Stream
{
Stream& printf(int n);
Stream& printf(char c);
Stream& printf(double d);
Stream& printf(const char* s);
};
Stream& Stream::printf(int n)
{
::printf("%d", n);
return *this;
}
Stream& Stream::printf(char c)
{
::printf("%c", c);
return *this;
}
Stream& Stream::printf(double d)
{
::printf("%lf", d);
return *this;
}
Stream& Stream::printf(const char* s)
{
::printf("%s", s);
return *this;
}
int main(void)
{
Stream c;
c.printf(5).printf('A').printf(3.14).printf("Seoul").printf('\n');
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 상수 멤버함수 const member function (5) | 2025.02.19 |
---|---|
[C++] return by reference (4) | 2025.02.15 |
[C++] static 변수 필요성 및 활용 (5) | 2025.02.06 |
[C++] default 생성자 요청 (2) | 2025.02.05 |
[C++] 복사 생성자 (Copy Constructor)란? (3) | 2025.02.04 |
댓글