学习笔记(21):c++入门到精通教程 c++11/14/17-基类与派生类关系的详细再探讨

立即学习:https://edu.csdn.net/course/play/9186/191705?utm_source=blogtoedu

 
      //一:派生类对象模型的简述

//Men mymen; // 子类(派生类)对象 包含多个组成部分(也就是多个子对象)
(1) 一个是 含有派生类自己定义的成员变量 或者成员函数的子对象
(2) 一个是该派生类所继承的基类的子对象  ,这个子对象中包含的是基类中定义的成员变量
//Human* phuman = new Men; //基类指针 可以new派生类对象 因为派生类对象基础部分
//                            //换句话说 我们可以用基类指针new一个派生类对象
//                            //编译器帮助我们做了一个隐式转换
//
二:派生类构造函数
//Men mymen; //既调用基类构造函数 又调用派生类构造函数
//派生类实际是使用 基类的构造函数 ;

//B b(10, 12, 13);  //先执行基类的构造函数 在执行派生类的构造函数
                  //先执行派生类的构造函数 再执行基类的构造函数

 

//三:既当父类又当子类
//class gra{...};
//class fa:public gra{..};//gra是fa的直接基类
//class son:public fa{...};//gra是son的间接基类(爷爷类)
//继承关系一直传递  构成了一种继承链

//四:不想当基类的类


//C++11标准  :final 加载类名后边

//五: 静态类型与动态类型
//Human* phuman = new Men();
//Human& q = *phuman;

//静态类型就是变量声明的类型  静态类型就是编译的时候是已知的
//动态类型:指的是这个指针/引用 所代表的 内存中的对象的类型。 这里是Men类型。
        //动态类型 是运行时候才能知道
//动态类型: 静态类型这种概念 只有基类


//六: 派生类向基类的隐式类型转换

//Human* phuman = new Men;
//Human& q = *phuman;
//这种转换能够成功 是以为每个派生类对象都包含一个基类的 对象部分 所以基类的引用或者指针是可以
//基类对象 能独立存在 也能作为派生类对象的一部分存在

//并不存在派生类到基类的类型转换


//Men* phu = new Human;

//Men men;
//Human* phuman = &men;
Men* pmen = phuman; //不可以  编译器发现基类不能转成派生类
如果基类中有虚函数的话  可以通过dynamic_cast可以转换
//
//Men* pmen = dynamic_cast<Men*>(phuman);
//if (pmen != nullptr)
//{
//    //{...}
//}

//父类与子类之间的拷贝与赋值
//Men men;
//Human human(men); //用派生类对象来定义并初始化基类对象 这个会导致基类的拷贝函数的执行

//赋值运算符
//Men men;
//Human human;
//human = men;

 

//结论
//用派生类对象为一个基类对象初始化或者赋值时 只有该派生类对象的

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页