본문 바로가기

프로그래밍 공부/C++

클래스형 포인터 및 함수 활용

매개변수로 클래스형 포인터를 받아서, 클래스 및 클래스형 포인터를 반환하는 함수에 대해서 알아본다.

 

일단 Point 클래스를 생성

class Point {
private:
    double x, y;

public:
    Point();
    Point(double _x, double _y);
    Point(const Point& p);
    ~Point();

    double getX() const;
    double getY() const;
    void print() const;
    void setX(double _x);
    void setY(double _y);
};
Point::Point() : x(0), y(0) { }
Point::Point(double _x, double _y) : x(_x), y(_y) { }
Point::Point(const Point& p) : x(p.x), y(p.y) { }
Point::~Point() { }
double Point::getX() const {
    return x;
}
double Point::getY() const {
    return y;
}
void Point::print() const {
    cout << "(" << x << ", " << y << ")" << endl;
}
void Point::setX(double _x) {
    x = _x;
}
void Point::setY(double _y) {
    y = _y;
}

 

다음은 2개 점 객체 포인터를 매개변수로 받아 내분점을 구하는 함수

첫 번째는 객체 자체를 반환하고, 두 번째는 객체 포인터를 반환한다.  

Point getDividingPoint(Point* p1, Point* p2, int m, int n) {
    Point dP;
    double x = ((p1->getX()) * n + (p2->getX()) * m) / (m + n);
    double y = ((p1->getY()) * n + (p2->getY()) * m) / (m + n);
    dP.setX(x);
    dP.setY(y);
    return dP;
}

Point* getDividingPoint(Point* p1, Point* p2, Point* p3, int m, int n) {
    double x = ((p1->getX()) * n + (p2->getX()) * m) / (m + n);
    double y = ((p1->getY()) * n + (p2->getY()) * m) / (m + n);
    p3->setX(x);
    p3->setY(y);
    return p3;
}

사실 두 번째는 void 형이 더 올바른 방법이지만, 학습을 위해서 위와 같이 작성했다.

 

아래는 main 함수

int main() {
    Point p1(3, 4);
    Point p2(6, 7);
    Point p3 = getDividingPoint(&p1, &p2, 1, 2);
    Point p4;
    Point* p5 = getDividingPoint(&p1, &p2, &p4, 1, 2);
    cout << "p1: ";
    p1.print();
    cout << "p2: ";
    p2.print();
    cout << endl;
    cout << "p3: ";
    p3.print();
    cout << "p4: ";
    p4.print();
    cout << "p5: ";
    p5->print();
    (*p5).print();	// 이렇게도 가능하다.
}

p3 ~ p5는 p1과 p2를 1:2로 내분하는 점이다.

p5는 함수를 통해서 p4의 포인터 주소를 전달 받는다.