有关C++继承与友元、继承与类型转换详解
实例如下:
#include<iostream> usingnamespacestd; classa{ friendclasspal; private: inti; protected: intj; public: intk; }; classb:publica{ protected: intl; }; classc:protecteda{}; classd:privatea{}; classe:publicb{}; classpal{ public: voidf(aa1){ cout<<a1.i;//正确,友元能访问私有成员 } voidf1(bb1){ cout<<b1.i;//正确,友元能访问派生类的基类部分 cout<<b1.l;//出错,pal类不是b的友元 } }; classderi_pal:publicpal{ public: voidf2(aa1){ cout<<a.i;//出错,友元不能继承 } }; intmain() { aa1; bb1; cc1; dd1; ee1; a1=b1;//正确,只有公共继承的派生类才能向基类转换 a1=e1;//正确 a1=c1;//出错,只有公共继承的派生类才能向基类转换 a1=d1;//出错,只有公共继承的派生类才能向基类转换 system("pause"); return0; }
对基类指针进行动态绑定时,派生类必须是public派生而来,否则不能把基类指针绑定到派生类对象上
#include<iostream> usingnamespacestd; classa{}; classb:publica{}; classc:protecteda{}; classd:privatea{}; classbb:publicb{}; classcc:publicc{}; classdd:publicd{}; intmain() { aa1;bb1;cc1;dd1;bbbb1;cccc1;dddd1; a*a1=&b1;//ok a*a2=&c1;//error a*a3=&d1;//error a*a4=&bb1;//ok a*a5=&cc1;//error a*a6=&dd1;//error system("pause"); return0; }
以上这篇有关C++继承与友元、继承与类型转换详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。