31 继承(三)
来源:互联网 发布:笔记本预装linux 编辑:程序博客网 时间:2024/06/01 07:27
派生类到基类的转换
1.当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型upcasting安全转换)
派生类对象指针自动转化为基类对象指针
派生类对象引用自动转化为基类对象引用
派生类对象自动转换为基类对象(特有成员消失)
2.当派生类以private/protected方式继承基类时
派生类对象指针(引用)转化为基类对象指针(引用)需用强制类型转化。但不能用static_cast,要用reinterpret_cast
不能把派生类对象强制转换为基类对象
#include <iostream>#include <string>using namespace std;class Employee{public: Employee(const string& name, const int age, const int deptno) :name_(name), age_(age), deptno_(deptno) { }private: string name_; int age_; int deptno_;};class Manager : public Employee{public: Manager(const string& name, const int age, const int deptno, int level) :Employee(name, age, deptno), level_(level) { }private: int level_;};class Manager2 : private Employee{public: Manager2(const string& name, const int age, const int deptno, int level) :Employee(name, age, deptno), level_(level) { }private: int level_;};int main(){ Employee e1("zhangsan",25,20); Manager m1("lisi",38,20,10); Manager2 m2("wanghu", 40, 15, 8); Employee* pe; Manager* pm; Manager2* pm2; pe = &e1; pm = &m1; pm2 = &m2; pe = &m1;//派生类对象指针可以转化为基类对象指针,将派生类对象看成基类对象 //pm = &e1;//基类对象指针无法转化为派生类对象指针。无法将基类对象看成是派生类对象 e1 = m1;//派生类对象可以转化为基类对象。将派生类对象看成基类对象(前提是派生类以public方式继承基类) //会产生对象切割(派生类特有成员消失) //pe = pm2;//私有或保护继承的时候,派生类对象指针不可以自动转化为基类对象指针 pe = reinterpret_cast<Employee*>(pm2);//强制转换 e1 = m1;//私有或保护继承的时候,派生类对象无法转化为基类对象。 //e1 = reinterpret_cast<Employee>(m2);//私有或保护继承的时候,派生类对象无法强制转化为基类对象 pe = reinterpret_cast<Employee*>(pm2); //pm2 = static_cast<Manager*>(pe); //基类指针可以强制转化为派生类指针,但是不安全,会pm->level_,但是level_不存在 //m1 = reinterpret_cast<Manager>e1;//基类对象无法强制转换为派生类对象 return 0;}//static_casr用于编译认可的静态转换。比如说从char 到int.从double到int。或者具有转换构造函数。或者重载了类型转换运算符。//reinterpret_cast 用于编译器不认可的静态转换。int* 转为int 在转型的过程中,不做任何的对其操作//const_cast 去除常量性//dynamic_cast 用于动态转换。安全的向下转型。多态
0 0
- 31 继承(三)
- 32 继承(三)
- (九)继承三
- C++ 继承(三)
- 继承(三)
- JavaScript中继承(三) -- 组合继承
- javascript继承(三)混合继承
- C++继承(三)通过菱形继承看virtual继承
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- js学习(三)继承
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- JavaScript继承详解(三)
- jsp页面显示时间格式
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- ReactJS学习笔记(一)-深入理解ReactJS的面向组件即对象
- STL笔记(6)——空间配置器Allocator(四)
- Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
- 31 继承(三)
- Mipmap纹理技术简介
- iOS 重写pop跳转的方法
- 去除单链表中的重复元素
- Singleton的性感你了解多少?
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- iReport自定义快捷键
- 数据结构与算法(七):常见数据结构与算法概括
- 一到递归??的js题