当我在基类中有一个相同的命名函数时,我如何调用基类中定义的派生常量函数



代码如下所示。

为什么p1->display((导致生成错误?

如何通过派生ptr调用display() const

#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;
}

Derive中的非constdisplay()隐藏了Base中的constdisplay()

将此添加到Derive中以引入:

using Base::display;

演示

请注意,您现在有两个virtual重载,它们可能会被单独覆盖。

class Last : public Derive {
public:
void display() override { std::cout << "non-const overriddenn"; }
void display() const override { std::cout << "const overriddenn"; }
};
int main() {
Derive* l1 = new Last;
l1->display();                 // prints non-const overridden
const Derive* l2 = new Last;   // prints const overridden
l2->display();
}

最新更新