Перегрузка конструкторов при наследовании |
А теперь мы дополним наш новый класс двумя координатами, описывающими вторую точку (x1,y1), по которой может быть построен прямоугольник:
class Rectangle : public Point
{
private:
int x1, y1;
public:
Rectangle():Point() {}
Rectangle(int nx, int ny):Point (nx,ny) {}
};
Здесь мы сталкиваемся с такой ситуацией, что наш новый конструктор не решает всех необходимых задач инициализации, т. к. не инициализируются при создании объекта свойства x1 и y1. Таким образом, нам необходима другая реализация конструктора по умолчанию, и конструктора, для инициализации всех четырех координат при создании объекта. Так, же, нам понадобится несколько изменить реализацию функции Show(), т. к. эта функция отображает только координаты первой точки:
class Rectangle : public Point
{
public:
int x1, y1;
public:
Rectangle():Point(),x1(200),y1(200) {}
Rectangle(int nx, int ny, int nx1, int ny1):Point (nx,ny),x1(nx1),y1(ny1) {}
void Show()
{
cout<<"Coord: ("<<x<<","<<y<<")-("<<x1<<","<<y1<<")\n";
}
};
void main()
{
Rectangle r;
Rectangle r1(10,10,20,20);
r.Show(); //(100,100)-(200,200)
r1.Show();//(10,10)-(20,20)
}
Здесь мы создаем два объекта. Для одного объекта запускаются оба конструктора по умолчанию, для другого, запускаются оба конструктора с параметрами. В этом случае, мы можем говорить, что конструкторы базового класса перегружены.
Теперь, представим, что конструктор по умолчанию класса Rectangle должен произвести какие-то действия. Тогда реализация его будет выглядеть так:
Rectangle():Point(),x1(200),y1(200)
{
x+=50;
y+=50;
}
Сначала запустится конструктор класса Point, который проинициализирует свойства x и y. А затем запустится конструктор класса Rectangle, в котором эти свойства будут увеличены на 50.
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |