zoukankan      html  css  js  c++  java
  • Professional C++读书笔记04

    2012-05-18

    Chapter08

    1、初始化列表:允许在创建数据成员的同时完成数据成员的初始化

             语法:以冒号开头,以逗号做分隔符,每个元素分别对一个数据成员初始化,可以使用函数记法

             例:SpreadsheetCell::SpreadsheetCell():mValue(0),mString(“”);

             注:在构造函数体内为一个对象赋值时,并没有真正构造该对象(这些数据成员已经初始化),这一点与初始化列表不同

             注:初始化列表按类定义中数据成员声明的顺序进行初始化,而非初始化列表中的顺序

    2、将对象按const引用来传递,而不是按值来传递

             按const引用效率更高,只会复制对象的地址,而不会复制对象的整个内容

    3、

    如果定义了。。。

    编译器会生成。。。

    可以创建

    举例

    未定义构造函数

    一个0参

    一个复制构造函数

    不带参数

    作另一个对象的副本

    SpreadsheetCell cell;

    SpreadsheetCell mycell (cell);

    仅一个0参构造函数

    一个复制构造函数

    不带参数

    作另一个对象的副本

    SpreadsheetCell cell;

    SpreadsheetCell mycell (cell);

    仅一个复制构造函数

    理论上可以做另一个对象的副本,实际上不能创建任何对象

    无(没办法创建第一个对象)

    仅一个单参或多参构造函数(非复制)

    一个复制构造函数

    带参数

    作另一个对象的副本

    SpreadsheetCell cell(6);

    SpreadsheetCell mycell (cell);

    一个零参和一个单参构造函数

    一个复制构造函数

    不带参数

    带参数

    做另一个对象的副本

    SpreadsheetCell cell;

    SpreadsheetCell cell(6);

    SpreadsheetCell mycell (cell);

    4、对于栈上的对象,如果出了作用域,对象会自动撤销,按声明的逆序撤销

             堆上分配的对象不会自动撤销,必须对对象指针调用delete,从而调用析构函数,并释放内存

    5、在C++中,复制只在对象初始化时才会出现,其余成为赋值

             赋值运算符:为了实现a=b=c的赋值,assignment operator应该返回一个对象的引用

             等号不一定表示赋值:当用在变量声明的时候,也可能是复制构造函数的简写

             如SpreadsheetCell aCell=myCell    //这就是复制构造函数

    6、赋值运算符

             1),检查自赋值的情况

             2),若牵涉到指针,则应该先释放原有内存,并根据rhs的大小重新分配内存

             3),返回一个对象的引用,即*this

    7、string s;

             s=str.getString();     //同一行既调用了赋值运算符(对于s),又调用了复制构造函数(对于str)

             getString返回一个string,编译器会调用一个复制构造函数创建一个临时string对象

             string s2=str.getString();                   //s2与str均调用了复制构造函数

  • 相关阅读:
    Bzoj1499: [NOI2005]瑰丽华尔兹
    Bzoj1016: [JSOI2008]最小生成树计数
    清橙A1212:剪枝
    SPOJ1825:Free tour II
    http://www.freepik.com/
    A Guide To Transclusion in AngularJS
    styling-customizing-file-inputs
    You Don't Know JS: this & Object Prototypes
    git中https和SSH的区别
    difference between match and exec
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2535370.html
Copyright © 2011-2022 走看看