【发布时间】:2021-03-09 05:37:29
【问题描述】:
我有一个带有两个重载函数f(void) 和f(int) 的基类。 Derived 类通过调用 f(void) 实现 f(int)。 Derived2 仅实现 f(void)。
编译器拒绝实现Derived::f(int),因为它想调用f(int),但我没有提供任何参数,因为我想调用f(void)。为什么编译器会拒绝它?为什么添加行 virtual int f(void) = 0; 可以解决我的问题?
class Base
{
public:
explicit Base(void) {}
virtual ~Base(void) {}
virtual int f(void) = 0;
virtual int f(int i) = 0;
};
class Derived : public Base
{
public:
// provide implementation for f(int) which uses f(void). Does not compile.
virtual int f(int i) {puts("Derived::f(int)"); return f();}
// code only compiles by adding the following line.
virtual int f(void) = 0;
};
class Derived2 : public Derived
{
public:
// overwrite only f(void). f(int) is implemented by Derived.
virtual int f(void) {puts("Derived2::f(void)"); return 4;}
};
int main(void)
{
Base * p = new Derived2();
int i0 = p->f(); // outputs Derived2::f(void) and returns 4
int i1 = p->f(1); // outputs "Derived::f(int) Derived2::f(void)" and return 4
delete p;
return 0;
}
【问题讨论】:
标签: c++ polymorphism overloading virtual