Double r ;

public:

Circle (double rVal =0) : r(rVal) {}

void setRadius(double rVal) { r = rVal; }

double getRadiusO {return r; } .double Area() {return pi*r*r; }

void showData() ;

};

class Cylinder: public Circle { protected:

double h;

public:

Cylinder(double hVal = 0,double rVal = 0)

: getHeight(hVal), Circle(rVal) { }

void setHeight(double hVal) { h = hVal; }

double getHeight() {return h; }

double Area() {return 2*Circle::Area()+2*pi*r*h; }

void showData() ;

void Circle::showData() {

cout “ "Радиус окружности = " “ getRadius() “ endl

“ "Площадь круга = " “ Area О “ endl “ endl;

}

void Cylinder::showData()

{

cout “ "Радиус основания = " “ getRadius() “ endl

“ "Высота цилиндра = " “ getHeight() “ endl

“ "Площадь поверхности = " “ Area () “ endl;

}

void main()

{

Circle circle(2) ;

Cylinder cylinder(10, 1);

circle.showData () ;

cylinder.showData() ;

Листинг 3.8. Простая иерархия классов окружности и цилиндра.

Объявление класса Circle содержит единственный член данных r, конструктор и ряд методов. При создании объекта конструктор инициализирует член данных r начальным значением радиуса окружности. Отметим новый синтаксис конструктора: при вызове он может обратиться к конструктору базового класса, а также к любому члену данных, указанному после двоеточия. В нашем случае член данных r "создается" обращением к нему с параметром rVal и инициализируется нулевым значением.

Метод setRadius устанавливает, a getRadius возвращает значение члена данных г. Метод Area возвращает площадь круга. Метод showData выдает значения радиуса окружности и площади круга.

Класс Cylinder, объявленный как производный от Circle, содержит единственный член данных h, конструктор и ряд методов. Этот класс наследует член данных г для хранения радиуса основания цилиндра и методы setRadius и getRadius. При создании объекта конструктор инициализирует члены данных г и h начальными значениями. Отметим новый синтаксис конструктора: в нашем случае член данных h инициализируется значением аргумента hVal, а член данных г - вызовом конструктора базового класса Circle с аргументом rVal.

Функция setHeight устанавливает, a getHeight возвращает значение члена данных h. Circle::Area перегружает унаследованную функцию базового класса, чтобы теперь возвращать площадь поверхности цилиндра. Функция showData выдает значения радиуса основания, высоты и площади поверхности цилиндра.

Функция main создает окружность circle класса Circle с радиусом 2 и цилиндр cylinder класса Cylinder с высотой 10 и радиусом основания 1, а затем обращается к showData для вывода параметров созданных объектов:

Радиус окружности = 2 Площадь круга = 12.566

Радиус основания = 1 Высота цилиндра = 10 Площадь поверхности = 69.115