C++ 当基类指针指向在基类中声明的派生类虚函数时,为什么会出现编译时错误?
我有一个基类,它具有虚void function1(),并且在派生类中被重写。此外,在我的派生类中还有一个虚拟函数,如下所示C++ 当基类指针指向在基类中声明的派生类虚函数时,为什么会出现编译时错误?,c++,polymorphism,virtual-functions,static-typing,name-lookup,C++,Polymorphism,Virtual Functions,Static Typing,Name Lookup,我有一个基类,它具有虚void function1(),并且在派生类中被重写。此外,在我的派生类中还有一个虚拟函数,如下所示 class Base { public: virtual void function1() { cout<<"Base::Virtual function1"<<endl; } }; class Derived1:public Base { public: void function
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;
}
类基
{
公众:
虚空函数1()
{
cout在基类base
中,您没有虚拟的function2
,因此如果将“base”用作类型编译器,则无法找到function2
改为:
class Base
{
public:
virtual void function1()
{
cout<<"Base::Virtual function1"<<endl;
}
virtual void function2() = 0;
};
类基
{
公众:
虚空函数1()
{
cout在基类base
中,您没有虚拟的function2
,因此如果将“base”用作类型编译器,则无法找到function2
改为:
class Base
{
public:
virtual void function1()
{
cout<<"Base::Virtual function1"<<endl;
}
virtual void function2() = 0;
};
类基
{
公众:
虚空函数1()
{
cout编译器不跟踪bptr的运行时类型,而是始终认为它指向Base的实例。您必须在Base中声明function2,编译器才能确认它。此外,派生类中的function1不应该像基类中的function1一样声明为virtual吗?编译器不跟踪运行时类型e类型的bptr,并始终认为它指向Base的实例。您必须在Base中声明function2,编译器才能确认它。此外,派生类中的function1不应该声明为虚拟类吗?您没有Derived2
类这可能是具有静态类型的y编译语言您没有Derived2
类这可能是任何具有静态类型的编译语言的行为本质上的重复function 1
在Derived
中是虚拟的,只是因为它在Base
中是虚拟的。关键字是可选的,但为了清楚起见,它应该是虚拟的应该在那里。Derived
中的function1
是虚拟的,因为它在Base
中是虚拟的。关键字是可选的,但为了清楚起见,它可能应该在那里。