РЕДАКТИРОВАТЬ: Этот вопрос возник, и я думаю, что я его запустил! Go StackOverflow!!: D
У меня есть экзамены, и один из вопросов на экзаменах в прошлом году состоял в том, чтобы выявить проблему с реализацией следующего конструктора и написать исправленную.
Rectangle::Rectangle(string col, int len, int br)
{
setColour(col);
length =len;
breadth=br;
}
Определения классов следующие:
class Polygon
{
public:
Polygon(string col="red");
void printDetails(); // prints colour only
virtual double getArea()=0;
void setColour(string col);
private:
string colour;
};
class Rectangle : public Polygon
{
public:
Rectangle(string, int, int);
void printDetails(); // prints colour and area
// for part 3, delete the line below
double getArea();
private:
int length;
int breadth;
};
Я написал код в компилятор, и он работает нормально. Я предполагаю, что вопрос связан с наследованием, поскольку string colour;
является закрытым, но setColour
является общедоступным, поэтому я не могу понять его. Если нет Rectangle::Rectangle(string col, int len, int br):length(len), breadth(br)
, а затем установите цвет внутри конструктора или что-то в этом роде.
Единственное, что стоит 3 знака, так это не такая большая сделка, если никто не хочет отвечать, но я думаю, что если у меня будет карьера программиста, то в моих интересах знать как можно больше.;)
Спасибо за любую помощь.
PS, см. getArea()
в Rectangle
. Когда я удаляю это, он говорит мне, что "не может создать экземпляр абстрактного класса". Что это значит?
EDIT: Здесь главное:
void main (void)
{
Rectangle rect1 ("blue",5,6);
Rectangle *prect2 = new Rectangle("red",5,6);
rect1.setColour("red");
rect1.printDetails();
prect2->printDetails();
}