继承期间显示未知行为的子类
Child class showing unknown behavior during inheritance
我正在制作一个简单的程序,在这个程序中我创建了一个抽象的shape类,矩形类继承自shape类。我的代码是:
#include <iostream>
using namespace std;
class shape {
protected:
int height;
int width;
public:
shape(int h, int w): height(h), width(w)
{};
virtual double area() = 0;
};
class rectangle: public shape {
public:
rectangle(int h, int w): shape(height, width)
{};
double area() {
return (height * width);
}
};
int main() {
rectangle r1(4, 8);
cout << "Area of rectangle r1 is " << r1.area() << endl;
return 0;
}
输出:
Area of rectangle r1 is 0
它显示面积是0,但它应该显示面积是32。
在构造函数中:
rectangle(int h, int w): shape(height, width) {};
您使用的不是参数h
和w
,而是height
和width
的现有值。由于这些未初始化,使用它们会调用未定义的行为,并且您碰巧看到结果为0。
如果打开警告,编译器应该对此进行抱怨。
你需要做:
rectangle(int h, int w): shape(h, w) {};
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 模型类/子类,其中子类类型在C++中先验未知
- 在子类之外实现函数导致未知错误
- 未知子类的 MPI 传输与 boost::mpi::p acked_oarchive 和 packed_iarchive
- 以某种方式将基类的指针强制转换为未知子类
- 如何为抽象类的未知子类分配内存