gpt4 book ai didi

c++ - 使用虚拟重写基类方法不起作用

转载 作者:行者123 更新时间:2023-11-28 03:07:40 24 4
gpt4 key购买 nike

我有 2 个类:ShapeTwoD 和 Square

Square 源自 ShapeTwoD

ShapeTwoD 类

class ShapeTwoD
{
public:
ShapeTwoD();
ShapeTwoD(string,bool);

string getName();
void setName(string);

bool getContainsWarpSpace();
void setContainsWarpSpace(bool);

void toString();

virtual double computeArea(){return 2+3.0};

virtual bool isPointInShape(int,int);
virtual bool isPointOnShape(int,int);



private:
string name;
bool containsWarpSpace;


};

类(class)广场

   #include "ShapeTwoD.h"
class Square:public ShapeTwoD
{
public:
virtual double computeArea(){return 2+4.0};

};

在我的主要方法中,我尝试调用方法 computeArea() 的 Square 版本,而不是继续调用方法 computeArea() 的 ShapeTwoD 版本。我在网上读到,放置关键字 virtual 将允许动态确定该方法,因此允许我调用该方法的 Square 版本 computeArea()

为什么会发生这种情况以及如何调用方法 computeArea() 的 Square 版本

 using namespace std;

#include "Square.h"

int main()
{

Square s;
s.setName("Sponge");
cout<<s.computeArea(); //outputs 5 when i expect it to output 6
}

最佳答案

这个工作并返回 6 对我来说是预期的:

class ShapeTwoD {
public:
virtual double computeArea(){return 2+3.0;};
};

class Square:public ShapeTwoD
{
public:
virtual double computeArea(){return 2+4.0;};
};

我必须在 computeArea 中的 之前添加 ;,您是否错过了示例?否则,您可能没有运行最新版本。

编辑

include 无关紧要,因为文件会被包含,就好像它们是在您包含它们的地方进行编码一样。

如果您正在使用 gcc/g++(但我想其他编译器也有类似的选项)您可以使用选项 -E 来查看 .c/.cpp 预编译阶段后的文件结果(也是#include)

g++ -c -E test.cpp

结果是:

# 2 "test.cpp" 2

using namespace std;

# 1 "square.h" 1
# 1 "shapetwo.h" 1
class ShapeTwoD
{
public:
virtual double computeArea(){return 2+3.0;};
};
# 2 "square.h" 2

class Square:public ShapeTwoD
{
public:
virtual double computeArea(){return 2+4.0;};
};
# 6 "test.cpp" 2

int main() {
Square s;
cout<<s.computeArea();
}

关于c++ - 使用虚拟重写基类方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19310188/

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