假设基类A定义了虚函数foo,访问类型为public,
派生类B从A继承,重写foo,并修改访问类型为protected
派生类C从A继承,重写foo,并修改访问类型为private
在这种情况下,依然可以通过A指针访问B和C的foo函数
#include<iostream>
using namespace std;
class A{
public:
virtual void foo(){
cout << "A::foo" << endl;
}
};
class B : public A{
protected:
void foo() override{
cout << "B::foo" << endl;
}
};
class C : public A{
private:
void foo() override{
cout << "C::foo" << endl;
}
};
int main()
{
A *pB = new B;
A *pC = new C;
pB->foo();
pC->foo();
return 0;
}
程序输出为:
B::foo
C::foo