C++ 学习(派生类到基类准还的可访问性)
2015-12-30 15:23
435 查看
当派生类是以公有方式继承时,用户代码才能使用派生类向基类的转换,否则用户代码不可完成转换
无论派生类是以哪种方式继承,派生类的成员函数和友元函数都可以完成派生类向基类的转换。
设派生类是D, 基类是B, 当以protected方式继承时,D的派生类的成员函数和友元可以完成派生类向基类的转换, 但是如果D继承B 的方式是private则不可以。
代码写得有点恶心
无论派生类是以哪种方式继承,派生类的成员函数和友元函数都可以完成派生类向基类的转换。
设派生类是D, 基类是B, 当以protected方式继承时,D的派生类的成员函数和友元可以完成派生类向基类的转换, 但是如果D继承B 的方式是private则不可以。
代码写得有点恶心
#include <iostream> #include <string.h> #include <algorithm> #include <stdlib.h> #include <stdio.h> using namespace std; void func(); class A{ public: int a; void get(){ cout<<"A "<<": "<<a<<endl; } }; class B : public A{ public: int b; void getB(){ cout<<"b : "<< b<<endl; } void getA(A &a){ cout<<"getA :"<<a.a<<endl; } }; class C: protected A{ public : int c; void getC(){ cout<<" c "<<c<<endl; } void inputA(int n){ a = n; } void getA( C & cc){ A aa = (C) cc; cout<<"getA :" <<aa.a<<endl; } friend void func(C c); }; class D: private A{ public: int d; void getD(){ cout<<"D "<<d<<endl; } void getA(D &d){ A aa = (A) d; cout<<"getA :" <<aa.a<<endl; } void setA(int b){ a = b; } friend void func(D d); }; void func(D d){ A aa = (A) d; cout<<"friend "<<aa.a<<endl; } void func(C c){ A aa = (A) c; cout<<"friend "<<aa.a<<endl; } void get(A &a){ a.get(); } class E : protected B{ }; int main(){ B b; A a; C c; D d; a.a = 1; b.a = 2; c.c = 3; c.inputA(3); d.setA(4); //D d; //get(c); // d.getA(d); func(d); }
相关文章推荐
- C++开发人脸性别识别教程(2)——VisualStudio初探
- 测试一下
- c++ libjson相关资料
- 如何成为一个C++高级程序员
- 一份C++线程池的代码,非常实用
- OC语言使用“消息结构”(messaging structure)而非“函数调用”(function calling)
- c语言ispunct函数
- 站在巨人的肩膀上,C++开源库大全
- C&C++编译(1)
- Java与C/C++有什么区别
- Java与C/C++有什么区别
- C语言中联合体union的使用
- C++ 服务器客户端编程实例(一)
- C语言中sizeof用法总结
- Sicily 1159. Sum
- C/C++语言中struct的深入探讨
- C语言中的字符和字符串
- C语言struct内存占用问题
- delete void* 释放内存问题(C++)
- C++几种转换类型的区别