多态、using
class base
{
private:
int x;
public:
virtual void f1() = 0;
virtual void f2()
{
cout<<"vf2"<<endl;
}
void f2(int x){
cout<<"xf2"<<endl;
};
void f3()
{
cout<<"f3"<<endl;
}
void f3(int x)
{
cout<<"f33"<<endl;
}
};
class derive:public base
{
public:
void f1()
{
cout<<"d:f1"<<endl;;
}
void f2()
{
cout<<"d:f2"<<endl;
}
void f3()
{
cout<<"d:f3"<<endl;
}
using base::f3;
};
int main()
{
derive d;
int x = 4;
d.f1(); //子类实现了基类的纯虚函数,调用的是子类的虚函数
d.f2(); // 如上
d.f3(); // 子类中的f3隐藏了基类中的两个f3,子类只能调用其自身实现的函数,无法调用基类中的同名函数(非虚函数可以隐藏虚函数)
d.f3(x); // 在使用了using base::f3;后子类可以调用基类中的函数,但同名同参数的基类函数将被覆盖
cout<<"/////////基类指针/////////////// "<<endl;
base *pb = &d; // 用基类来调用子类,所有非虚函数将直接调用基类的