gpt4 book ai didi

c++ - 当我在子类中有同名的函数时,如何调用基类中定义的派生 const 函数?

转载 作者:行者123 更新时间:2023-12-03 07:00:22 27 4
gpt4 key购买 nike

代码看起来像这样。
为什么 p1->display() 会导致构建错误?
怎么打电话display() const通过派生的ptr?

#include <iostream>
using namespace std;

class Base
{
public:
virtual void display() const
{
std::cout << "Base display const!" << std::endl;
}
virtual ~Base(){}
};

class Derive: public Base
{
public:
virtual void display()
{
std::cout << "Derive display!"<< std::endl;
}
virtual ~Derive(){}
};

int main()
{
const Base *pb1 = new Derive();
pb1->display(); // Base display const!
Base *pb2 = new Derive();
pb2->display(); // Base display const!
const Derive *p1 = new Derive();
//p1->display(); // Build Error
Derive *p2 = new Derive();
p2->display(); // Derive display!
return 0;
}

最佳答案

const display()Derive正在隐藏 const display()Base .
将此添加到 Derive把它带进来:

using Base::display;
Demo
请注意,您现在有两个 virtual可以单独覆盖的重载。
class Last : public Derive {
public:
void display() override { std::cout << "non-const overridden\n"; }
void display() const override { std::cout << "const overridden\n"; }
};

int main() {
Derive* l1 = new Last;
l1->display(); // prints non-const overridden
const Derive* l2 = new Last; // prints const overridden
l2->display();
}

关于c++ - 当我在子类中有同名的函数时,如何调用基类中定义的派生 const 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64661940/

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