1.声明:virtual 同名成员名
可实现父类访问子类中与其同名的成员
#include<iostream>
using namespace std;
class A{
protected:
int x;
public:
A(int x1=0):x(x1){
}
virtual void print(){//在类A中定义print为虚函数
cout<<"A类中的x="<<x<<endl;
}
};
class B:public A{
int y;
public:
B(int x1=0,int y1=0):A(x1){
y=y1;
}
virtual void print(){//在类B中定义print为虚函数
cout<<"B类中的x="<<x<<"\ty="<<y<<endl;
}
};
class C:public A{
int z;
public:
C(int x1=0,int z1=0):A(x1){
z=z1;
}
virtual void print(){//在类C中定义print为虚函数
cout<<"C类中的x="<<x<<"\tz="<<z<<endl;
}
};
int main()
{
A a(2);
B b(3,4);//子类b对象将3赋值给A类中的x成员
C c(5,6);//子类c对象将5赋值给A类中的x成员
A *p[3]={&a,&b,&c};//定义父类A的指针,分别装B,C对象的地址
for(int i=0;i<3;i++)
p[i]->print();//print被定义为虚函数,可实现父类A分别对子类B,C对象中同名成员的访问
b.print();//b对象对本类方法的访问
c.print();
}
运行结果
可实现子类调用自身方法同样的效果,通过父类指针去调用子类中的同名成员