我目前在下面的代码中尝试在实例化 Solid 类型的对象时将数据成员 x、y 和 z 初始化为 0。第 25、26 和 27 行包含错误,我将如何重写这些行以访问 x 和 y 成员并将它们设置为 0?
编辑1:我在下面写出了我的代码。
编辑 2:为了解决问题,唯一可以更改的代码行是包含错误的行。应该重写派生类以访问私有数据成员。
class Shape
{
private:
int x, y;
protected:
string _type;
public:
Shape() { x = y = 0; }
Shape(int a, int b) { x = a; y = b; }
string type() { return _type; }
void stype(string val) { _type + val; }
int getx() { return x; }
int gety() { return y; }
};
class Solid : public Shape
{
int z;
public:
Solid() { x = y = z = 0; } // errors
Solid(int a, int b, int c) { x = a; y = b; z = c; } //
int Volume() { return x * y * z; } //
};
int main()
{
Solid ob1;
return 0;
}
您无法访问基类的私有成员,本练习的重点是您不需要这样做——而不是您应该想出一种方法来做到这一点。
你的默认构造函数应该只设置它自己的成员 -Shape
默认构造函数负责它自己的成员:
Solid() { z = 0; }
或(首选方法,实际上是初始化而不是赋值)
Solid() :z(0) {}
另一个构造函数应该初始化基类,然后z
:
Solid(int a, int b, int c) : Shape(a,b), z(c){}
并且Volume
应该使用提供的访问器:
int Volume() { return getx() * gety() * z; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句