객체지향프로그래밍2_실습_/_정보보호학과_/_20054934_/_장재훈

<연산중복 정의>

1. 화면상의 한점을 표현하는 Point 클래스를 구현하시오. 좌표값 설정을 위한 SetPoint(int, int)와 좌표값 조회를 위한 Point GetPoint(), 그리고 좌표값 출력을 위한 Print() 메소드를 구현하시오.

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

// Point class header

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

#ifndef _POINT_H_

#define _POINT_H_

class Point

{

public:

Point( int = 0, int = 0 );

virtual ~Point();

void    SetPoint( int, int );

Point   GetPoint() const;

void    Print() const;

private:

int     x;

int     y;

};

#endif // _POINT_H_

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

// Point class implementation

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

#include <iostream>

#include "Point.h"

using std::cout;

using std::endl;

Point::Point( int xValue, int yValue )

: x(xValue), y(yValue)

{

cout << "Point Constructor : ";

Print();

cout << endl;

}

Point::~Point()

{

cout << "Point Destructor: ";

Print();

cout << endl;

}

void Point::SetPoint( int xValue, int yValue )

{

x = xValue;

y = yValue;

}

Point Point::GetPoint() const

{

return *this;

}

void Point::Print() const

{

cout << "Point : [" << x << ", " << y << ']';

}

2. Point 클래스의 객체를 정의하고, 좌표를 200, 300으로 이동한 후, 설정된 객체 정보를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point pnt = Point();

pnt.SetPoint(200, 300);

pnt.Print();

cout << endl;

}

3. Point 클래스의 객체를 동적 객체 생성 연산자 new를 사용하여 생성하고, 좌표를 200, 300으로 이동하고 설정된 객체 정보를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point *pPnt = new Point();

pPnt->SetPoint(200, 300);

pPnt->Print();

cout << endl;

delete pPnt;

}

4. 다음 프로그램의 부작용을 설명하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point *pPnt = new Point();

pPnt->SetPoint(200, 300);

pPnt->Print();

cout << endl;

}

// delete 연산자로 pPnt 의 동적 할당된 공간을 해제 시켜주지 않았음.

5. 배열을 이용하여 세 개의 Point 클래스 객체를 정의하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point pnt[3];

pnt[0].SetPoint(100, 200);

pnt[1].SetPoint(200, 200);

pnt[2].SetPoint(200, 300);

pnt[0].Print();

pnt[1].Print();

pnt[2].Print();

}

6. 배열을 이용하여 세 개의 Point 클래스 객체를 정의하되, 배열의 초기값을 지정하고 결과를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point pnt[3] = { Point(100, 200),

Point(200, 200),

Point(200, 300)};

pnt[0].Print();

pnt[1].Print();

pnt[2].Print();

}

7. 1차원 포인터를 이용하여 세 개의 Point 클래스 객체를 new 연산자를 사용하여 동적으로 생성하고, 각 요소를 배열 첨자를 사용하여 좌표값을 설정하고 결과를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point *pPnt = new Point[3];

pPnt[0].SetPoint(100, 200);

pPnt[1].SetPoint(200, 200);

pPnt[2].SetPoint(200, 300);

pPnt[0].Print();

pPnt[1].Print();

pPnt[2].Print();

delete [] pPnt;

}

8. 1차원 포인터를 이용하여 세 개의 Point 클래스 객체를 new 연산자를 사용하여 동적으로 생성하고, 각 요소를 포인터와 포인터 연산을 사용하여 좌표값을 설정하고 결과를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point *pPnt = new Point[3];

(pPnt+0)->SetPoint(100, 200);

(pPnt+1)->SetPoint(200, 200);

(pPnt+2)->SetPoint(200, 300);

(pPnt+0)->Print();

(pPnt+1)->Print();

(pPnt+2)->Print();

delete [] pPnt;

}

9. 다음 프로그램의 부작용을 설명하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point *pPnt = new Point[3];

pPnt[0].SetPoint(100, 200);

pPnt[1].SetPoint(200, 200);

pPnt[2].SetPoint(200, 300);

pPnt[0].Print();

pPnt[1].Print();

pPnt[2].Print();

delete pPnt;

//      delete [] pPnt;

}

// delete 연산자로 pPnt를 해제시켜 줄 때 인덱스 연산자 []를 쓰지 않고 해제 시 오류 발생.

// compile 시에는 오류가 없지만, 실행 시 객체를 해제 시키는 과정에서 오류 발생.

// pPnt의 주소가 가리키는 [0]번째의 해제 메시지를 출력 후 오류.

10. 2차원 배열을 이용하여 2행 3열의 Point 클래스 객체를 생성하고, 배열의 각 요소에 좌표값을 설정한 후 결과를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point pnt[2][3];

for(int i=0; i<2; i++)

for(int j=0; j<3; j++)

pnt[i][j].SetPoint(j, i);

for(i=0; i<2; i++)

for(int j=0; j<3; j++)

pnt[i][j].Print();

}

11. 2차원 포인터를 이용하여 2행 3열의 Point 클래스 객체를 new 연산자를 사용하여 동적으로 생성하고, 배열의 각 요소에 좌표값을 설정한 후 결과를 출력하시오.

#include <iostream>

using namespace std;

#include "Point.h"

void main()

{

Point **pPnt = (Point**)new Point[2];

for(int i=0; i<2; i++)

pPnt[i] = new Point[3];

for(i=0; i<2; i++)

for(int j=0; j<3; j++)

pPnt[i][j].SetPoint(j, i);

for(i=0; i<2; i++)

for(int j=0; j<3; j++)

pPnt[i][j].Print();

for(i=0; i<2; i++)

delete [] pPnt[i];

}