C++继承与友元、继承与类型转换
2015-12-02 22:14
639 查看
#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; }
相关文章推荐
- 一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
- C++类的析构函数不能抛出异常
- 在C++中,关键字explicit的作用
- C++ 标准IO库
- C语言纪要
- 判断数组中是否有重复的数字(C++)
- 【C++】基础知识—对C语言的加强
- JNI调用C++类的方式
- leetcode 283 Move Zeroes C++
- C语言 九九乘法表
- 稀疏矩阵的C++实现
- private, public, protected 访问标号的访问范围之C++篇
- POJ 2828 Buy Tickets 题意&题解&代码(c++)
- c++学习笔记(专注细节,持续更新)
- Protocol Buffer技术详解(C++实例)
- 不用加减乘除做加法(C++)
- 初学链表的一些总结
- 自学c语言的第一天(算是吧)
- 【C语言提高18】【字符串模型】strstr_while/dowhile
- C语言基础知识1