• 面向对象程序设计-C++ Inheritance & Multiple inheritance & RTTI【第十三次上课笔记】


    Sadly, 这节课带过去的笔记本没电了 T^T 

    导致没有一行 Code, Sorry

    笔记如下:

     1 Shape * p1;    //使用指针创建对象的方法
     2 p = new Circle (2.0);
     3 Shape * p2;
     4 p = new Rectangle (3.0, 5.0);
     5 
     6 class Shape {
     7 public:
     8     virtual double area () = 0;    //Pure virtual function
     9 }
    10 
    11 //Warning: 纯虚函数不能以内敛的形式进行定义,只能在类的外部定义
    12 
    13 //如果,抽象基类中没有定义的虚函数,那么,在其派生类中定义也无法实现
    14 
    15 //C++ 对象布局
    16 //概念:    成员函数占的空间不在对象中,而在代码段中
    17 
    18 EmptyClass es;
    19 cout << sizeof (es);    //输出为1,非空,即只存在es对象的地址
    20 
    21 //1. C++ 给每个含有虚函数的类分配 virtual function table (Vtable)
    22 //2. 给其每一个对象创建一个虚指针
    23 
    24 //Override 覆盖: 基类中有虚函数,派生类中重新实现; 返回值类型也要一样
    25 //Overload 重载
    26 //Namebinding 隐藏: 派生类中定义了函数会把基类中所有同名函数隐藏
    27 //恢复隐藏的方法
    28 
    29 int x = d4.Base::f ();    //实现间接访问被隐藏的虚函数,所谓的隐藏只是直接访问隐藏
    30 
    31 //在构造函数,析构函数用虚函数,只会调用本类的实现
    32 //在非静态成员函数中使用虚函数时,则会调用覆盖了的虚函数版本
    33 //因为静态成员函数中无 this 指针
    34 
    35 //RTTI : 运行时类型鉴别, 根据虚函数原理
    36 Runtime Type indentification
    37 
    38 #include <typeinfo> //需要导入的头文件
    39 
    40 typeid ()        //获取当前对象实际类型
    41 typeid (br).name ()
    42 
    43 //多重继承
    44 
    45 class Dog : public Pet, public animal {
    46     
    47 };
    48 
    49 //dynamic_case : 向下的类型转化
    50 
    51 Dog * pd = dynamic_case <Dog *> (p);
    52 
    53 //1. 如果 p 的类型是 Dog * 类型,则 pd = p
    54 //2. 否则,pd = NULL 为空
    55 
    56 //只用于指针或引用,定义指针类中有虚函数,一定是多态类
  • 相关阅读:
    三比三:无线监控优点与传输技术剖解
    手把手教你学习FPGA系列视频教程_救护车鸣笛声
    世纪大争论:Linux还是GNU/Linux?
    [分享]我的LABVIEW快速开发串口测试软件实例
    高能效系统的功耗优化技术
    python学习小脚本多用户登录
    python学习三级菜单省市选择
    python学习购物车小程序
    python学习语句总结
    python学习猜年龄小游戏
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4545217.html
Copyright © 2020-2023  润新知