45
Если у базовых классов есть общий предок (
Person в примере),
то производный класс унаследует два экземпляра поля предка, а это чаще
всего нежелательно. Для вызова метода
get_age() требуется явно указы-
вать классы, в которых эти методы описаны, иначе компилятор не сможет
разобраться к методу какого из базовых классов надо обратиться. Чтобы
избежать двойного наследования полей,
при наследовании общего
предка, его определяют с ключевым словом
virtual (виртуальный класс).
class Person {...};
class Student: virtual Person{...};
class Employee: virtual Person{...};
class Employee_Student: public Employee, public Student
{...};
Класс
Employee_Student будет содержать только один экземпляр
полей класса
Person.
Задание. Написать реализацию класса
Shape и наследовать от него класс
Circle. Описание класса
Shape и
Сircle представлены ниже:
// shape.h
class Shape
{
protected:
int color;
public:
Shape(){color=14;}
Shape(int color){this->color=color;}
~Shape();
int get_color();
void set_color(int);
virtual void show()=0;
virtual void hide()=0;
virtual void move(int dx, int dy)=0;
virtual void moveto(int x, int y)=0;
};
46
// circle.h
class Circle:public Shape{
protected:
int x, y, r;
public:
Circle():Shape(){x=100; y=100;}
Circle(int x, int y, int r, int c):Shape(c){this->x=x; this->y=y; this->r=r};
~Circle();
int get_x();
int get_y();
int get_r();
void set_x(int);
void set_y(int);
void set_r(int);
virtual void show();
virtual void hide();
virtual void move(int dx,int dy);
virtual void moveto(int x,int y);
};
Достарыңызбен бөлісу: