gpt4 book ai didi

c++ - 无法访问派生类中的基变量

转载 作者:行者123 更新时间:2023-11-28 08:09:26 25 4
gpt4 key购买 nike

以下编译代码显示了零的结果区域。一些 width 和 height 变量如何仍然保持为零,即使我们使用基本构造函数设置它。

#include <iostream> 
using namespace std;

class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
virtual int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0)
{
Shape(a, b);
}
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0)
{
Shape(a, b);
}
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height / 2);
}
};
// Main function for the program
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);

// store the address of Rectangle
shape = &rec;
// call rectangle area.
cout << shape->area() << endl;

// store the address of Triangle
shape = &tri;
// call triangle area.
cout << shape->area() << endl;

return 0;
}

输出:矩形类区域:0矩形类区域:0

试图找出面积为零的原因以及如何使 pgm 打印实际面积?

最佳答案

正确的语法是:

Rectangle( int a=0, int b=0) : Shape(a, b)
{ // ^^^^^^^^^^^^
}

您需要调用 Shape 构造函数作为 initializer list 的一部分。
如您的示例所示,如果您将其写成语句

{
Shape(a,b); // <--- no effect on Base part
}

然后,一个临时的 Shape 对象被创建和销毁,所以它没有任何作用。

关于c++ - 无法访问派生类中的基变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9493780/

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