Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

07 наследование 1

.pdf
Скачиваний:
18
Добавлен:
27.03.2015
Размер:
331.96 Кб
Скачать

07 – 11

int getX() { return x; } int getY() { return y; }

};

Point::Point(int a, int b) { setPoint(a, b); }

void Point::setPoint(int a, int b) { x = a; y = b; }

07 – 12

// Перегруженная операция вывода в поток ОБК

ostream &operator << (ostream &output, Point &p)

{

output

<< ’[’

<< p.x << ”, ”

return

<< p.y << ’]’;

output;

// разрешает сцепление

}

07 – 13

//ПК; представляет круг с центром

//в точке (x,y) и радиусом radius

class Circle: public Point { friend ostream &operator <<

(ostream &, Circle &); protected:

float radius; public:

Circle(float=0.0, int=0, int=0); void setRadius(float);

07 – 14

float getRadius();

float area(); // возвращает площадь

};

//Конструктор ПК; вызывает конструктор БК

//через инициализатор элемента, а затем

//инициализирует радиус

Circle::Circle(float r, int a, int b): Point(a, b)

{ setRadius(r); }

07 – 15

void Circle::setRadius(float r) { radius = (r>=0 ? r:0); }

float Circle::getRadius() { return radius; }

float Circle::area()

{

return 3.14 * radius * radius;

}

07 – 16

// Перегруженная операция вывода в поток ОПК

ostream &operator << (ostream &output, Circle &c)

{

output << ”Центр = [”

<<c.x << ”, ” << c.y

<<”]; Радиус = ”

<<c.radius;

return output;

}

07 – 17

int main()

{

Point *pointPtr=0, p(30,50); Circle *circlePtr=0, c(2.7,120,89);

//ОБК обрабатывается как ОБК через имя

//объекта

cout << ”ОБК как ОБК: ” << p << endl;

07 – 18

//ОПК обрабатывается как ОПК через имя

//объекта

cout << ”ОПК как ОПК: ”

<< c << endl << endl;

07 – 19

//ОПК обрабатывается как ОБК через УБК,

//не преобразованный в УПК; в ОПК видны

//только унаследованные элементы

pointPtr = &c;

cout << ”ОПК как ОБК через УБК,

<<не преобразованный в УПК:

<<endl << *pointPtr

<<endl << endl;

07 – 20

//ОПК обрабатывается как ОПК через УБК,

//преобразованный в УПК; в ОПК видны

//все элементы

circlePtr = (Circle *) pointPtr;

cout << ”ОПК как ОПК через УБК,

<<преобразованный в УПК:

<<endl << *circlePtr

<<endl << ”Площадь:

<<circlePtr -> area()

<<endl << endl;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]