EDIT: Cette question est venu et je pense que j'ai très bien réussi il! Aller StackOverflow!! :D
J'ai des examens à venir, et l'une des questions sur l'année dernière examens était de repérer le problème avec la mise en œuvre de la suite de constructeur et d'écrire un corrigées.
Rectangle::Rectangle(string col, int len, int br)
{
setColour(col);
length =len;
breadth=br;
}
Les définitions de classe sont comme suit:
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;
};
J'ai écrit le code dans le compilateur et il fonctionne très bien. Je suppose que la question est relative à la succession, depuis string colour;
est privé, mais setColour
est public donc je ne peux pas le comprendre. À moins que son Rectangle::Rectangle(string col, int len, int br):length(len), breadth(br)
, puis de définir la couleur à l'intérieur de la construcor ou quelque chose.
Sa ne vaut 3 points donc ce n'est pas un gros problème si personne ne veut répondre, mais je me dis que si je vais avoir une carrière en tant que programmeur, son dans mon intérêt d'en savoir autant que possible. ;)
Merci pour toute aide.
PS, reportez - getArea()
en Rectangle
. Quand je le supprimer il me dit qu'il "ne peut pas instancier la classe abstraite". Qu'est-ce que cela signifie?
EDIT: Voici les principaux:
void main (void)
{
Rectangle rect1 ("blue",5,6);
Rectangle *prect2 = new Rectangle("red",5,6);
rect1.setColour("red");
rect1.printDetails();
prect2->printDetails();
}