我有一个基类,它有 virtual void function1( ) 并且在派生类中被覆盖。此外,我的派生类中还有一个虚函数,如下所示。
class Base
{
public:
virtual void function1()
{
cout<<"Base::Virtual function1"<<endl;
}
};
class Derived1:public Base
{
public:
void function1()
{
cout<<"Derived1::Function1"<<endl;
}
virtual void function2()
{
cout<<"Derived1::function2"<<endl;
}
};
int main()
{
Base *bptr = new Derived1();
Derived1 *dptr = new Derived2();
bptr->function2(); //compile time error
return 0;
}
我想知道在编译时发生了什么导致编译时错误。 我想从面试的角度得到答案。 Vtable 和 Vptr 在这种情况下如何表现。我知道 Base 类会有一个 vptr,它将被继承到 Derived1 类。编译器在编译时检查什么?
最佳答案
在基类 Base
中,您没有虚拟 function2
,因此如果您使用“Base”作为类型,编译器将无法找到 function2
.
更改为:
class Base
{
public:
virtual void function1()
{
cout<<"Base::Virtual function1"<<endl;
}
virtual void function2() = 0;
};
并且您可以使用 function2。 还有一个错误,因为你没有 Derived2
关于c++ - 当基类指针指向在基类中声明的派生类虚函数时,为什么会出现编译时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55183270/