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

제목포인트 내 변수 호출 관련 질문입니다.2019-11-13 08:56
작성자

class Point {

private:

int x;

int y;

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


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() {

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 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; 

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


Point* list = new Point[5];

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

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

cout << "=========================================" << endl;

delete[] list;

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


Point pt2(10, 20); // cntObj 1 증가 -> 7

Point pt3(100, 200); // cntObj 1증가 -> 8

pt1 = pt2 + pt3; // cntObj 1증가 -> 9

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


cout << "============SpyPoint 나온다========" << endl;

SpyPoint spy; 

spy.hacking(pt1);

spy.hacking(pt2);

spy.hacking(pt3);


cout << "Exit Program" << endl;

return 0;

}


위의 코드 중 색칠 된 부분에 관련해 질문 드립니다.


pt1과 pt2의 포인트 멤버변수인 x와 y를 'pt1.x', 'pt1.y', 'pt2.x', 'pt2.y' 이렇게 호출하고 있는데요.

1. 메소드인 getX(), getY()로 호출하는 것이랑 x와 y를 불러온다는 것 행위에서 차이가 있는지 아니면 같은 건지 궁금합니다.

2. 만약 멤버변수가 height, weight였으면 'pt1.height','pt1.weight' 이런 식으로 호출하면 되는 것인가요?

'.' 다음 메소드를 썼던 것 같은데, 저기에선 바로 변수가 나와서 이렇게 불러도 되는 것인지 궁금했습니다. 

댓글