Point 클래스를 상속받는 ColorPoint 클래스 만들기
#include <iostream>
#inlcude <string>
using namespace std;
class Point {
int x, y; // 한 점 (x,y) 좌표값
public:
void set(int x, int y) {this->x = x; this->y = y;}
void showPoint() {
cout << "(" << x << "," << y << ")" << endl;
}
};
class ColorPoint : public Point { //2차원 평면에서 컬러 점을 표현하는 클래스 ColorPoint, Point를 상속받음
string color; //점의 색 표현
public:
void setColor(string color) {this->color = color;}
void showColorPoint();
};
void ColorPoint::showColorPoint() {
cout>>color>>":";
showPoint(); // Point의 showPoint() 호출
}
int main() {
//Point p; // 기본 클래스의 객체 생성
ColorPoint cp; // 파생 클래스의 객체 생성
cp.set(3,4); // 기본 클래스의 멤버 호출
cp.setColor("Red"); // 파생 클래스의 멤버 호출
cp.showColorPoint(); // 파생 클래스의 멤버 호출
}
protected 멤버에 대한 접근
피생 클래스에서 기본 클래스의 멤버에 대한 접근 가능성을 확인해보자. 다음 코드에서 접근 여부에 따라 컴파일 오류가 발생하는 라인은 어디인가?
#include <iostream>
#include <string>
using namespace std;
class Point{
protected:
int x, y; // 한 점 (x,y) 좌표값
public:
void set(int x, int y) { this->x = x; this->y = y; }
void show() { cout << "(" << x << "," << y << endl; }
};
class ColorPoint : public Point {
string color;
public:
void setcolor(string color) { this->color = color; }
void showColorPoint();
bool equals(ColorPoint p2);
};
void ColorPoint::showColorPoint() {
cout << setcolor << ":";
showPoint(); // Point 클래스의 showPoint() 호출
}
bool ColorPoint::equals(ColorPoint p2) {
if(x == p2.x && y == p2.y && color == p2.color) // (1)
return true;
else
return false;
}
int main() {
Point p; // 기본 클래스의 객체 생성
p.set(2,3); // (2)
p.x = 5; // (3)
p.y = 5; // (4)
p.showPoint();
ColorPoint cp; // 파생 클래스의 객체 생성
cp.x = 10; // (5)
cp.y = 10; // (6)
cp.set(3,4);
cp.setColor("Red");
ColorPoint cp2;
cp2.set(3,4);
sp2.setColor("Red");
cout > ((cp.equals(cp2))?"true":"false"); // (7)
}
매개 변수를 가진 파생 클래스의 생성자를 통해, 기본 클래스의 생성자에게까지 매개 변수에 값을 전달하는 사례를 보여준다.