gpt4 book ai didi

c++ - "Marked as override but does not override"OOP代码问题

转载 作者:行者123 更新时间:2023-12-01 23:02:56 32 4
gpt4 key购买 nike

我正在尝试在 C++ 中练习 OOP,但我遇到了有关覆盖函数的问题。在我的 Shape2D 和 Shape3D 类中,我有在 Square 和 Sphere 类(分别为 ShowArea() 和 ShowVolume())中重新定义的虚函数。但是,当我重新定义函数并尝试运行 main 时,它会输出错误:

Shapes.cpp:88:14: error: 'void Square::ShowArea() const' marked 'override', but does not override

void ShowArea() const override{

Shapes.cpp:353:14: error: 'void Sphere::ShowVolume() const' marked 'override', but does not override

void ShowVolume() const override {

下面是 Shape2D、Square、Shape3D 和 Sphere 类的相关代码片段。

class Shape2D : virtual public Shape {

public:

virtual float Area() const = 0;

void ShowArea() const;

virtual string GetName2D() const = 0;
}



class Square: public Shape2D {

private:
float squareLen;

public:

// Constructors
Square() {
squareLen = 0;
}

Square(float len) {
squareLen = len;
}

string GetName2D() const override {
string res;

return res;
}

// Returns the area of the shape
float Area() const override {
return (squareLen * squareLen);
}

void ShowArea() const override{
cout << "Square Area: " << endl;
}
}


class Shape3D : virtual public Shape {
public:
virtual float Volume() const = 0;
void ShowVolume() const;
virtual string GetName3D() const = 0;
}



class Sphere: public Shape3D {

private:
Circle* SphereBase;

public:
Sphere() {
SphereBase = new Circle();
}

Sphere(float radius) {
SphereBase = new Circle(radius);
}

float Volume() const {
return (1.3333 * pi * pow(SphereBase->GetRadius(), 3));
}

void ShowVolume() const override {

}

当我在子类中重新定义函数并且该函数在其原始定义中是虚拟的时,为什么会出现这种情况?它不适用于我的任何形状(我有 6 种形状,但在这篇文章中只包含 2 种)所以我不认为它是一个拼写错误并且它在 2D 和 3D 形状上崩溃所以它不是那些特定类的问题。

最佳答案

Shape2D类中声明的函数ShowArea

void ShowArea() const;

不是虚函数。所以派生类中的这个声明 Square

void ShowArea() const override{
cout << "Square Area: " << endl;
}

不正确。

另外 Shape3D 类中声明的函数 ShowVolume 不是虚函数

void ShowVolume() const;

它不能在派生类中被覆盖。

您需要在基类中将函数声明为虚函数,以便它们可以被覆盖。

关于c++ - "Marked as override but does not override"OOP代码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71546012/

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