Задача

Создайте иерархию классов Point – Circle – Cylinder. Класс Point (точка) должен содержать координаты точки - х и у. Их следует объявить с квалификатором protected (защи­щенные).

Откры­тая часть класса Point должна содержать следующие функции:

1. конструктор по умолчанию, в котором x и y присваивается значение 0;

2. функцию SetPoint(int x, int y) для изменения x и y, новые координаты должны быть переданы в функцию в качестве параметров;

3. функцию Print() для вывода координат на экран в форме [ x, y ].

Класс Circle (круг), производный от класса Point, должен хранить радиус круга, также его следует дополнить функциями SetRadius(int r) (установка радиуса) и Area(), которая возвращает площадь круга. Переопределённая функция Print() должна выводить на экран координаты центра круга и его радиус. В классе Circle тоже должен быть конструктор по умолчанию.

Класс Cylinder (цилиндр), производный от Circle, должен содержать переменную Height – высоту цилиндра, дополнительные функции SetHeight(int h) и Volume() (вычисляет объём цилиндра), Print() должна выводить [x, y] и объём цилиндра на экран.

Написать программу, демонстрирующую работу с созданными классами.

Программа:

// lb-2.cpp: Defines the entry point for the console application.

//

#include “stdafx.h”

#include “iostream”

using namespace std;

class Point

{

protected:

int x,y;

public:

Point()

{

x=0;

y=0;

}

~Point(){}

void SetPoint(int x1, int y1)

{

x=x1;

y=y1;

}

void Print()

{

cout << “[“<<x<<”,”<<y<<”]”<<’\n’;

}

};

class Circle: public Point

{

protected:

int r;

public:

Circle()

{

r=0;

Point::Point();

}

~Circle(){}

void SetRadius(int r1)

{

r=r1;

}

double Area()

{

return 3.1415*r*r;

}

void Print()

{

Point::Print();

cout<<r<<’\n’;

}

};

class Cylinder: public Circle

{

protected:

int h;

public:

cylinder()

{

h=0;

Circle::Circle();

}

~Cylinder(){}

void SetHeight(int h1)

{

h=h1;

}

double Volume()

{

return Circle::Area()*h;

}

void Print()

{

Point::Print();

cout<<Volume()<<’\n’;

}

};

int _tmain(int argc, _TCHAR* argv[])

{

Circle c;

c.SetPoint(2,4);

c.SeyRadius(10);

c.Print();

Cylinder s;

s.SetPoint(2,4);

s.SetRadius(6);

s.SetHeight(9);

s.Print();

return 0;

}

1.1 Контрольные вопросы

1. Чем класс отличается от структуры?

2. Может ли класс быть производным от нескольких классов?

3. Когда вызывается конструктор? Когда вызывается деструктор?

4. Что неправильно в конструкторе класса:

class sample

{

double a, b, c;

public:

double sample();

};

5. Объясните, зачем нужна категория защищенности protected.

Скачать очень оригинальную программу vkmusic вы можете на сайте.