nakka soft world !

대입연산자 (assignment operator) 본문

프로그래밍언어/C++

대입연산자 (assignment operator)

nakka 2017. 3. 19. 16:28
728x90

대입연산자 (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 대입연산자

}

728x90

'프로그래밍언어 > 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
Comments