class CPoint {
private:
int x, y;
public:
// 생성자
CPoint(int a, int b): x(a), y(b) {}
// 소멸자
~CPoint(){cout << "소멸자" << endl;}
}
CPoint::CPoint(int a, int b) : x(a), y(b){
}
CPoint::~CPoint(){
cout << "소멸자" << endl;
}
void CPoint::Move(int a, int b){
x += a;
y += b;
}
클래스 외부 정의할 때는 함수명 앞에 클래스 명이 있어야된다.
this
return this
return *this
#include <iostream>
using namespace std;
class MyClass {
public:
int value;
MyClass(int v){
value = v;
}
// 멤버 함수에서 this 포인터 사용
void printAddress(){
cout << this << endl;
}
// this 포인터를 사용하여 객체의 멤버에 접근
void setValue(int newValue){
this->value = newValue;
}
// this 포인터를 사용하여 객체 자신을 반환
MyClass* getThis(){
return this;
}
};
int main() {
// 생성자 초기 값
MyClass obj(10);
obj.setValue(10);
// 현재 주소 값 출력
obj.printAddress();
// this 포인터를 사용하여 객체 자신 반환
MyClass* ptr = obj.getThis();
cout << "Address return by getThis(): " << ptr << endl;
return 0;
}
class CPoint {
private:
int x;
int y;
public:
CPoint(int a=0, int b=0) : x(a), y(b) {}
void Print() { cout << x << " " << y << endl;}
// Center함수를 friend로 선언함.
friend CPoint Center(CPoint P1, CPoint P2);
}
// CPoint객체를 변경시키는 Center함수
CPoint Center(CPoint P1, CPoint P2){
CPoint Po;
// CPoint의 멤버변수를 변경가능하게 함.
Po.x = (P1.x + P2.x)/2;
Po.y = (P1.y + P2.y)/2;
// 변환된 객체를 리턴.
return Po;
}
void main(void){
// 객체 생성
CPoint P1(1, 2);
CPoint P2(3, 4);
// Center함수로부터 받은 리턴 값을 P3에 반환
CPoint P3 = Center(P1, P2);
// 4/2 = 2
// 6/2 = 3
// P3 출력
P3.print();
// 출력 결과 >> 2 3
}
예제 코드
#include <iostream>
class CPoint {
private:
int x;
int y;
public:
// static 변수
static int Count;
// 생성자
CPoint(int a, int b) : x(a), y(b) {}
int printCount(){
return Count;
}
};
// CPoint에 있는 Count변수를 0으로 초기화
int CPoint::Count = 0;
int main() {
// 객체 생성
CPoint P1(1, 2);
CPoint P2(3, 4);
// 객체 안에 있는 static변수를 변경 시켜줌.
P1.Count = 1;
P2.Count =2;
CPoint::Count = 3;
std::cout <<P2.printCount();
// 출력결과 >> 3
return 0;
}
void main(void){
// 임시 객체
CPoint(1, 2).print();
// 임시객체가 아님
CPoint P1 = CPoint(3,4);
CPoint &P2 = CPoint(5, 6);
CPoint P3;
// 대입을 위해 사용된 후 사라짐. 임시객체.
P3 = CPoint(7, 8);
}
장점:
단점: