Наследование классов
Каждый объект является конкретным представителем класса. Объекты одного класса имеют разные имена, но одинаковые по типам и внутренним именам данные. Объектам одного класса для обработки своих данных доступны одинаковые компонентные функции класса и одинаковые операции, настроенные на работу с объектами класса. Таким образом, класс выступает в роли типа, позволяющего вводить нужное количество объектов, имена (названия) которых программист выбирает по своему усмотрению.
Объекты разных классов и сами классы могут находиться в отношении наследования, при котором формируется иерархия объектов, соответствующая заранее предусмотренной иерархии классов. Иерархия классов позволяет определять новые классы на основе уже имеющихся. Имеющиеся классы обычно называются базовыми (иногда порождающими или родительскими), а новые классы, формируемые основе базовых, - производными (порождёнными), иногда классами-потомками или наследниками. Производные классы «получают наследство» - данные и методы своих базовых классов – и, кроме того, могут пополняться собственными компонентами (данными и собственными методами). Наследуемые компоненты не перемещаются в производный класс, а остаются в базовых классах. Сообщение, обработку которого не могут выполнить методы производного класса, автоматически передаётся в базовый класс. Классы могут наследовать свойства и методы нескольких родительских классов одновременно. Это называется множественное наследование.
Форма записи класса-наследника:
Класс-наследник – x
Родительские классы – y, z
// Наследование свойств и методов одного класса y
class x: <спецификатор доступа (как правило, public)> y
{…};
// Множественное наследование
class x: <спецификатор доступа)> y, z
{…};
Пример.
Описать 2 класса. Первый класс «точка»: свойства – координаты точки, метод – ввод-вывод координат. Второй класс «вектор в трёхмерном пространстве»: свойства – три координаты, методы – ввод-вывод координат, определение длины вектора.
class Point
{
private:
float x, y;
public:
void get_x (float x1);
void get_y (float y1);
void print ( );
};
void Point : : get_x (float x1)
{ x=x1; }
void Point : : get_y (float y1)
{ y=y1;}
void Point : : print ( )
{ printf (“{%f; %f}\n”, x, y); }
class V_3D : public Point
{
float z;
public:
void get_z (float z1);
void print ();
float len ();
};
void V_3D : : get_z (float z1)
{z=z1;}
void V_3D : : print ()
{print( “{%f;%f;%f}\n”,x, y, z); }
float V_3D : : len ()
{ return (sqrt (( x*x + y*y + z*z));}
Дата добавления: 2015-08-08; просмотров: 662;