본문 바로가기

공부/C++

뇌를 자극하는 C++ 프로그래밍 복사 생성자 Exercise 21-2

복사생성자 관련. 예제 코드.와 Exercise 21-2

#include <iostream>
using namespace std;

class Point
{//클래스 정의.
public:


int x, y;//멤버 변수

void print();//멤버 함수

Point();//생성자들
Point(int initialX, int initialY);
Point(const Point& pt);
//복사생성자


};
Point::Point(const Point& pt)
{
cout<<"복사생성자가 호출됨\n";
x=pt.x;
y=pt.y;
}


Point::Point(int initialX,int initialY)
{
x = initialX;
y = initialY;
}


Point::Point(){
x = 0;
y = 0;
}


void Point::print()//멤버함수를 밖에서 정의함.
{
cout << "(" << x << "," << y << ")\n";
}




int main()
{
Point pt1(100, 200), pt2(300,400);

Point pt3 = pt1;//해당값으로 초기화 //여기에서 이 문구는 Point pt3(pt1); 과 코드는 다르나 결과는 같다.
pt3.print();//출력.
pt3 =  pt2;//해당값으로 대체.
pt3.print();//출력

//출력시에 복사생성자가호출됨 이라는 문구가 한 번만 뜬 것으로 초기화가 아닌 대체 시에는 복사생성자가 호출되지 않음을 알 수 있다.

system("pause");//비쥬얼 스튜디오 2008 부터는 디버깅시에 이 문구를 사용하지 않을 시에 바로 디버깅이 종료되어버림.

return 0;

}


////////////////////////////////////////////////////

Exercise  부분.





#include <iostream>
using namespace std;

class Ball
{//클래스 정의.
public:


int _x, _y;//공의 위치
int _radius;//공의 반지름

Ball( int x, int y);//기본 생성자
Ball( const Ball& pt);//복사 생성자

void Print();//멤버 함수

Ball();//생성자들

//복사생성자


};
Ball::Ball(const Ball& pt)
{
cout<<"복사생성자가 호출됨\n";
_radius = 3;
_x=pt._x+ _radius;//반지름 만큼 x값에 더함.
_y=pt._y;
}


Ball::Ball(int initialX,int initialY)
{
_x = initialX;
_y = initialY;
}


Ball::Ball(){
_x = 0;
_y = 0;
}


void Ball::Print()//멤버함수를 밖에서 정의함.
{
cout << "(" << _x << "," << _y << ")\n";
}




int main()
{
Ball pt1(100, 200), pt2(100,200);

pt1.Print();
pt2.Print();//입력받은 값 출력


Ball pt3 = pt1;//해당값으로 초기화
pt3.Print();//복사 생성자가 호출된 이후를 출력.
pt3 =  pt2;//해당값으로 대체.
pt3.Print();//복사 생성자가 호출되지 않은 상태를 출력

//출력시에 복사생성자가호출됨 이라는 문구가 한 번만 뜬 것으로 초기화가 아닌 대체 시에는 복사생성자가 호출되지 않음을 알 수 있다.

system("pause");//비쥬얼 스튜디오 2008 부터는 디버깅시에 이 문구를 사용하지 않을 시에 바로 디버깅이 종료되어버림.

return 0;