매개변수로 클래스형 포인터를 받아서, 클래스 및 클래스형 포인터를 반환하는 함수에 대해서 알아본다.
일단 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의 포인터 주소를 전달 받는다.

'프로그래밍 공부 > C++' 카테고리의 다른 글
| 어서와 C++는 처음이지! 챕터6 Exercise (0) | 2026.06.15 |
|---|---|
| C++ 벡터 이해하기 (0) | 2026.06.12 |
| 어서와 C++는 처음이지! 챕터5 Exercise (0) | 2026.06.11 |
| 객체지향 프로그래밍 (0) | 2026.06.04 |
| 어서와 C++는 처음이지! 챕터3 Exercise (0) | 2026.06.04 |