gpt4 book ai didi

c++ - 在 C++ 中,当继承一个类并覆盖一个函数时。从数组调用该重写函数时出现意外结果

转载 作者:行者123 更新时间:2023-11-30 03:47:25 25 4
gpt4 key购买 nike

我有一个名为 House 的类,它从一个名为 City 的类扩展而来。

class City
{
public:
string get(){
return "San Francisco"
}
};

class House : public City
{
public:
string get(){
return "My House"
}
};

int main()
{
City world[2];
House h;
world[0] = h;
cout << world[0].get() << endl;
}

我想要返回的结果是“我的房子”,但我得到的是“旧金山”。为什么会这样,我该如何解决?我认为,如果您将函数命名为与继承类中存在的函数相同的名称,那么该函数将始终被调用。

最佳答案

对于你要找的东西,你应该使用 virtual 关键字,像这样:

class City
{
public:
virtual ~City() {}//you need virtual destructor
virtual string get(){
return "San Francisco"
}
};

你还需要使用指针而不是值来实现你想要的:

City *world[2];
world[0] = new House;
cout << world[0]->get() << endl;
delete world[0];

关于c++ - 在 C++ 中,当继承一个类并覆盖一个函数时。从数组调用该重写函数时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686498/

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