gpt4 book ai didi

c++ - C++ 构造函数的问题

转载 作者:IT老高 更新时间:2023-10-28 12:32:02 26 4
gpt4 key购买 nike

编辑:这个问题出现了,我想我做得很好!去堆栈溢出!! :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; 是私有(private)的,但 setColour 是公共(public)的,所以我无法弄清楚。除非它的 Rectangle::Rectangle(string col, int len, int br):length(len), breadth(br) 然后在contrucor里面设置颜色什么的。

它只值 3 分,所以如果没有人愿意回答,这没什么大不了的,但我认为如果我要从事程序员的职业,尽可能多地了解我的兴趣。 ;)

感谢您的帮助。

PS,参见 Rectangle 中的 getArea()。当我删除它时,它告诉我它“无法实例化抽象类”。这是什么意思?

编辑:这是主要内容:

void main (void)
{
Rectangle rect1 ("blue",5,6);
Rectangle *prect2 = new Rectangle("red",5,6);
rect1.setColour("red");
rect1.printDetails();
prect2->printDetails();
}

最佳答案

我没有发现任何问题,尽管您可以通过使用初始化列表来提高效率(否则您的两个类的私有(private)成员都会被初始化两次):

Rectangle::Rectangle(string col, int len, int br) 
: Polygon(col), length(len), breadth(br)
{

}

注意初始化列表也可以调用Polygon的构造函数。

Why should I prefer to use member initialization list?有关使用初始化列表的优点的完整描述。

关于c++ - C++ 构造函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com