• CSE207 객체지향 강좌 및 C++ 관련, 누구나 묻고 답하는 게시판 입니다.
  • CSE207 수강생이 아니여도 편안하게 질문하세요.
  • 첨부화일은 이미지 화일 혹은 zip 화일로 업로드 하기를 권합니다.

제목수업 내용 코드 비교 질문입니다.2019-11-11 17:34
작성자

class Point {

private:

int x;

int y;

static int cntObj; // 객체 안에서 초기화할 수 없음. 반드시 클래스 밖에서 초기화

// int* list;

// ofstream fout;

public:

Point() : x(0), y(0) {

//fout.open("file.txt");

//list = new int[100];

cntObj++; // 생성자 작동할 때마다 카운트 1증가

// 객체 안에서 초기화 불가

}


// initialization 생성자 : 객체 안에 있는 멤버 변수를 초기화

Point(int _x, int _y) : x(_x), y(_y) {

cntObj++;

}

// 소멸자 만들기

~Point() {

//// 할당해지

//delete[] list;

//fout.close();

cout << "Destructed.." << endl;

}


static int getCntObj() { return cntObj; }


void setXY(int _x, int _y) {

this->x = _x;

this->y = _y;

}


int getX() const { return this->x; }

int getY() const { return this->y; }


Point& operator=(const Point& pt) {

this->x = pt.x;

this->y = pt.y;

return (*this);

}

friend ostream& operator<<(ostream& cout, const Point& pt);

friend Point operator+(const Point& pt1, const Point& pt2);

friend class SpyPoint;

};



int Point::cntObj = 0;



ostream& operator<<(ostream& cout, const Point& pt) {

cout << pt.x << ", " << pt.y << endl;

return cout;

}

Point operator+(const Point& pt1, const Point& pt2) {

Point result(pt1.x + pt2.x, pt1.y + pt2.y);

return result;

}


class SkyPoint {

public:

void hacking(const Point& pt) {

cout << "x: " << pt.x << endl;

cout << "y: " << pt.y << endl;

cout << "cntObj: " << pt.cntObj << endl << endl;

}

};


int main() {

Point pt1(1, 2);

cout << "cntObj: " << pt1.getCntObj() << endl;

Point* pPt = &pt1; 

cout << "cntObj: " << pt1.getCntObj() << endl;


Point* list = new Point[5];

cout << "cntObj: " << list[0].getCntObj() << endl;

cout << "Before delete[]" << endl;

delete[] list;

cout << "After delete[]" << endl;


Point pt2(10, 20);

Point pt3(100, 200);

pt1 = pt2 + pt3;

cout << "cntObj: " << pt1.getCntObj() << endl; 


SkyPoint spy;

spy.hacking(pt1);

spy.hacking(pt2);

spy.hacking(pt3);


cout << "Exit Program" << endl;

return 0;

}


=====================================================================================


class Point {

private:

int x;

int y;

static int cntObj; // 객체 안에서 초기화 할 수 없음. 반드시 클래스 밖에서 초기화

 //   int* list;

 //   ofstream fout;

public:

Point() : x(0), y(0) {

//      list = new int[100];

cntObj++;

} //initialization // 생성자 : 객체 안에 있는 멤버 변수를 초기화

Point(int _x, int _y) : x(_x), y(_y) {

cntObj++;

} // 함수 오버로딩

~Point() {

//      fout.close();      //파일을 닫을때도.

//      delete[] list;      //소멸자는 클래스 안에서 동적할당을 했을 때, 할당해제를 할 때 사용해주면 좋음.

cout << "Destructed.." << endl;

}

static int getCntObj() { return cntObj; }

void setXY(int _x, int _y) {

this->x = _x; // this : 현재 객체 자기 자신의 주소값을 가지고 있는 변수

this->y = _y;

}


int getX() const { return this->x; }

int getY() const { return this->y; }

//Point pt1 = pt2 = pt3

Point& operator=(const Point& pt) {

this->x = pt.x;

this->y = pt.y;

return (*this);

}


//friend함수 : 클래스 안에 있는 private과 public에 있는 모든 멤버 변수를 사용할 수 있음.

friend ostream& operator<<(ostream& cout, const Point& pt);

friend Point operator+(const Point& pt1, const Point& pt2);

friend class SpyPoint;

};


int Point::cntObj = 0;


// cout << pt --> <<(cout, pt) --> return cout

// cout << pt1; cout << pt2

// cout << pt1 << pt2

//int& x = func(y) // return y (int&)



ostream& operator<<(ostream& cout, const Point& pt) {

cout << pt.x << ", " << pt.y << endl;

return cout;

}


Point operator+(const Point& pt1, const Point& pt2) {

Point result(pt1.x + pt2.x, pt1.y + pt2.y);

return result;

}


class SpyPoint {

public:

void hacking(const Point& pt) {

cout << "x: " << pt.x << endl;

cout << "y: " << pt.y << endl;

cout << "cntObj: " << pt.cntObj << endl << endl;

}

};




int main() {

Point pt1(1, 2);

cout << "cntObj: " << pt1.getCntObj() << endl;


Point* pPt = &pt1; // 객체가 아니라 포인터 변수이기 때문에 cntobj 변화 x

cout << "cntObj: " << pt1.getCntObj() << endl;


Point* list = new Point[5];

cout << "cntObj: " << list[0].getCntObj() << endl;

cout << "Before delete[]" << endl;

delete[] list;

cout << "After delete[]" << endl;


Point pt2(10, 20);

Point pt3(100, 200);

pt1 = pt2 + pt3;

cout << "cntObj: " << pt1.getCntObj() << endl;


SpyPoint spy;

spy.hacking(pt1);

spy.hacking(pt2);

spy.hacking(pt3);


cout << "Exit program" << endl;

return 0;

}


11월 7일날 제가 친 코드는 위의 것(1번)이고, 친구가 아래 코드(2번)를 작성했는데요.

지금 제 컴퓨터 상태로는 1번은 안 되는데 2번은 됩니다.

제가 3번 확인해봤는데, 다른 점을 찾지 못했거든요.

혹시 뭐가 잘못됐는지 알 수 있을까요?

수업 시간에 1번 코드도 됐던거 같은데, 복습하다보니 안돼서 질문드립니다.




댓글