在我的C++程序中:
#include<iostream.h>
class A
{
public:
virtual void func()
{
cout<<"In A"<<endl;
}
};
class B:public A
{
public:
void func()
{
cout<<"In B"<<endl;
}
};
class C:public B
{
public:
void func()
{
cout<<"In C"<<endl;
}
};
int main()
{
B *ptr=new C;
ptr->func();
}
Run Code Online (Sandbox Code Playgroud)
声明应该致电B::func().但是,该函数C::func()被称为.请详细说明一下.一旦在'A类'中删除了虚拟关键字,就不会再发生这种情况了.
在C++程序中:
#include<iostream.h>
class A
{
public: virtual void func()=0;
};
class B:public A
{
public: void show()
{
func();
}
};
void B::func()
{
cout<<"In B"<<endl;
}
int main()
{
B b;
b.show();
}
Run Code Online (Sandbox Code Playgroud)
如果在类B的主体内重新定义了虚函数func(),则没有错误.但是在使用范围解析运算符时,编译器会抛出错误.这是为什么?