Я создал три класса: квадрат, прямоугольник и многоугольник. Квадрат наследуется от Rectangle, а Rectangle наследуется от Polygon.многоуровневое наследование без вызова конструктора суперкласса
Проблема в том, что всякий раз, когда я вызываю конструктор Square, конструктор Rectangle вызывается, и я получаю сообщение об ошибке. Как я могу это решить?
#include <iostream>
using namespace std;
// Multilevel Inheritance
class Polygon
{
protected:
int sides;
};
class Rectangle: public Polygon
{
protected:
int length, breadth;
public:
Rectangle(int l, int b)
{
length = l;
breadth = b;
sides = 2;
}
void getDimensions()
{
cout << "Length = " << length << endl;
cout << "Breadth = " << breadth << endl;
}
};
class Square: public Rectangle
{
public:
Square(int side)
{
length = side;
breadth = length;
sides = 1;
}
};
int main(void)
{
Square s(10);
s.getDimensions();
}
Если я прокомментирую конструктор Rectangle, все будет хорошо. Но я хочу иметь оба конструктора. Я могу что-нибудь сделать?
класс 'Площадь: общественное Rectangle' да ладно ... – SingerOfTheFall
Вы не вызываете конструктор Rectangle непосредственно так конструктор по умолчанию будет называться ... Однако, это не имеет конструктора по умолчанию, вы должны определить его или напрямую вызвать свой. – Melkon
Квадрат/прямоугольник фактически обсуждается в другом месте в качестве примера против наследования. Можно было бы искушать обратное отношение наследования, что также приводит к другим проблемам. Тем не менее, вызовите Rectangles ctor со стороной, стороной: 'Квадрат (int сторона): Прямоугольник (сторона, сторона) {...}' О, и у Петра есть точка в его ответе относительно квадрата. –