nakka soft world !
대입연산자 (assignment operator) 본문
대입연산자 (assignment operator)
1. 개념
class Point
{
private:
int x, y;
public:
Point(int a = 0, int b = 0) : x(a), y(b) {}
void print() const { cout << x << ", " << y << endl; }
/* 사용자가 만들지 않아도 컴파일러가 만들어 줌.
// 주의 사항. 자신의 참조를 리턴 해야 함.
//void operator=(cinst Point& p)
Point& operator=(cinst Point& p) // 대입 연산자는 자기자신을 리턴함.
{
x = p.x;
y = p.y;
return *this;
}*/
};
int main()
{
Point p1(1, 1);
Point p2(2, 2);
Point p3 = p1; // 복사 생성자.
p1 + p2; // p1.operator+(p2)
p1 = p2; //p1.operator=(p2), 대입 연산 -> 사용자가 만들지 않아도 컴파일러가 자동으로 만들어줌.
(p1 = p2) = p3;
p1.print();
}
2. 대입연산자와 얕은 복사
class People
{
private:
char* name;
int age;
public:
People(char* n, int a) : age(a)
{
name = new char[strlen(n) + 1];
strcpy(name, n);
}
~People()
{
delete[] name;
}
};
int main()
{
People p1("kim", 2);
People p2("park", 5);
p1 = p2; // 컴파일러가 생성한 대입 연산자 함수는 주소 이동이기 때문에 p1의 주소를 p2로 바꾸게 되면 p1의 name의 메모리는 붕뜨게 된다.
}
3. 사용자가 만들지 않으면 컴파일러가 만들어 주는 멤버 함수들
class Point
{
private :
int x, y;
public:
Point() {}
~Point() {}
Point(const Point&) : x(p.x), y(p.y)
{
}
Point& operator=(const Point& p)
{
x = p.x;
y = p.y;
return *this;
}
// C++11 Move 생성자
// Move 대입연산자
}
'프로그래밍언어 > C++' 카테고리의 다른 글
STL (Standard Template Library) (0) | 2017.03.19 |
---|---|
String 클래스 만들기 (0) | 2017.03.19 |
스마트 포인터 (Smart Pointer) (0) | 2017.03.19 |
함수 객체(function object, fonctor) (0) | 2017.03.19 |
증가/감소 연산자 재정의 (0) | 2017.03.19 |