• Professional C++读书笔记06


    2012-05-22

    Chapter09

    1、操作符重载:实现类对象按简单类型进行+-

             例:SpreadsheetCell myCell(4),anotherCell(5);

                       SpreadsheetCell aThirdCell=myClee+anotherCell;

             const SpreadsheetCell operator+ (const SpreadsheetCell &cell)const;

             可以实现aThirdCell=myCell+5.6这样的操作

             解释:编译器会寻找一个double作参数的SpreadsheetCell的构造函数,并以5.6创建一个临时变量

             但,1,诸如myCell+str之类并无实际意义的相加可通过explicit关键字禁止。

             explicit放于类定义中,且只适用于仅有一个参数的构造函数

             explicit SpreadsheetCell (const string &str);           //使用示例

             2,若aThirdCell=5.6+myCell;会失败

             解决方案:使用全局operator+,并标注友元

    2012-05-22

    Chapter10

    1、函数覆盖:基类中声明virtual,字类与基类方法参数与返回值都一样

             经验:将所有方法都用virtual声明(包括析构函数),但不包括构造函数

             Base *p=new Derived(); 

             delete p;  //若基类不加virtual,析构时只调用了base的析构,而没有调用derived的

    2、多态:基类的指针(引用)指向派生类的对象,调用派生类对应的方法(基类要为virtual)

             注:但此时基类指针不可调用在基类中未定义的子类方法(即使指向子类)

             例:Derived de;

             Base &base=de;

             de.DericedFunc();    //√

             base.DerivedFunc();         //×

             若基类未定义DerivedFunc(),则不可这样调用。与多态不矛盾,多台要求基类存在且为virtual

    2012-05-27

    Chapter10

    1、函数隐藏:

             其中之一情况:子类方法的参数列表与基类不一样

             例如父类为someMethod();

             子类为someMethod(int i);

             则Derived d;   d.someMethod();//出错,父类函数已被隐藏

    2、在C++中,不能覆盖static方法

             即,若A a;

                       B &b=a;   则b.fun()调用b类的static方法

             (静态联编,只关心对象编译时的类型)

    3、在重写子类的复制构造函数时应显式的调用父类的

             如Sub::Sub(const Sub &insub):Super(insub){……}

             //若不写,调用的是父类的默认构造函数

    4、virtual实现机制。

             如果声明方法时使用了virtual,则在一块特别内存区域内寻找方法的实现。这块内存区域叫vtable,即虚表。包含一个或多个virtual方法的类都有一个虚表,包含了指向virtual方法实现的指针。通过这种方式,在一个对象上调用方法时,指针就进了虚表,并基于对象的类型执行该方法的正确版本,而不是根据静态类型来调用。

    如下图所示:

  • 相关阅读:
    解决安装vmware-tools出现的“The path "" is not a valid path to the 3.2.0-4-amd64 kernel headers”问题
    页面布局
    CSS属性/尺寸/边框/背景 超级链接
    前端
    索引
    Pymysql
    单表查询,多表查询,子查询
    表的完整性约束
    文件库,文件表,记录的增删改查
    IO多路复用,数据库mysql
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2535378.html
Copyright © 2020-2023  润新知