#include <iostream> using namespace std; class CFatherSum //父类Sum { public: int m_iVar; //公用数据成员 void money(){cout<<"Member of CFatherSum"<<endl;} }; class CFatherBru //父类Bru { public: int m_iVar; void money(){cout<<"Member of CFatherBru "<<endl;} }; class CFatherObam //父类Obam { public: int m_iVar; void money(){cout<<"Member of CFatherObam"<<endl;} //int setPri(){return m_iPriVar=m_iVar+99;} void getPri(){cout<<" Private member of CFatherObam is"<<(m_iPriVar=m_iVar+99)<<endl;} private: int m_iPriVar; //私有成员 }; class CSon:public CFatherSum,public CFatherBru,public CFatherObam //继承父Sum,Bru,Obam { public: int m_iVar; void money(){cout<<"Member of CSon"<<endl;} }; //主函数 int main() { CSon son; CSon *pSon=&son; son.m_iVar=1; //子类数据成员 son.money(); //子类函数 son.CFatherObam::m_iVar=2; //父类数据成员 son.CFatherObam::money(); //父类函数 son.CFatherObam::getPri(); //访问Obam父私有成员 pSon->CFatherObam::getPri(); //指针方法 getchar(); return 0; }
结果:
类图:
结论:通过作用域分辨符,明确访问目的,解决同名隐藏问题。
派生类中声明了与基类函数同名的方法,即使函数参数表不同,从基类继承的同名方法的所有重载也都会被隐藏。