C++为什么继承不起作用

C++ why is inheritance not working?

本文关键字:不起作用 继承 为什么 C++      更新时间:2023-10-16

In Shape.hpp:

class Shape {   
    public:
    char c;
    virtual void paint();
    ...
};

在三角形中:

#include "Shape.hpp"
class Triangle : public Shape {
    ...
};

在三角形.cpp:

...
void Triangle::paint() {
    ...
}
...

编译时:

error: class ‘Triangle’ does not have any field named ‘c’
error: no ‘void Triangle::paint()’ member function declared in class ‘Triangle’

我不明白为什么三角形没有其父类 Shape 的字段和成员函数。如何解决这个问题?

您还需要在 Triangle 中声明 paint() 成员函数:

class Triangle : public Shape 
{
 public:
    void paint() override;
};

在派生类中也需要声明覆盖函数:

class Triangle : public Shape 
{
 public:
    void paint();
};

(可选)在 C++11 中,您可以更明确地执行以下操作:

class Triangle : public Shape 
{
 public:
    void paint() override;
};

然后编译器也知道这是一个覆盖,所以可以"检查"你没有改变/添加你认为是覆盖的新函数。