实例如下:
#include <iostream> using namespace std; class a{friend class pal;private: int i;protected: int j;public: int k;};class b:public a{protected: int l;};class c:protected a{};class d:private a{};class e:public b{};class pal{public: void f(a a1){ cout<<a1.i;//正确,友元能访问私有成员 } void f1(b b1){ cout<<b1.i;//正确,友元能访问派生类的基类部分 cout<<b1.l;//出错,pal类不是b的友元 }};class deri_pal:public pal{public: void f2(a a1){ cout<<a.i;//出错,友元不能继承 }};int main() { a a1; b b1; c c1; d d1; e e1; a1=b1;//正确,只有公共继承的派生类才能向基类转换 a1=e1;//正确 a1=c1;//出错,只有公共继承的派生类才能向基类转换 a1=d1;//出错,只有公共继承的派生类才能向基类转换 system("pause"); return 0; }
对基类指针进行动态绑定时,派生类必须是public派生而来,否则不能把基类指针绑定到派生类对象上
#include <iostream> using namespace std; class a{};class b:public a{};class c:protected a{};class d:private a{};class bb:public b{};class cc:public c{};class dd:public d{};int main() { a a1;b b1;c c1;d d1;bb bb1;cc cc1;dd dd1; 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"); return 0; }
以上这篇有关C++继承与友元、继承与类型转换详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VEVB武林网。
新闻热点
疑难解答