• 复习各种技术


    C++允许(且只允许)构造函数使用一种特殊的语法为初始化类中的常量,称为成员初始化列表(member initializer list),成员初始化列表由逗号分隔的初始化列表组成,其位于构造函数参数列表的右括号后函数体的开始左大括号之前,以冒号开始,成员名后面跟括号,括号内为其初始化值,然后以逗号相隔每个成员。其中可以对所有的成员进行初始化,但是对于非静态const成员和被声明为引用的类成员来说,只能使用这种方式初始化:

    class CQueue  {   const int qsize;  int &aa; ...};

    CQueue::CQueue(int qs,int bb):qsize(qs),aa(bb){...}

    因为const和引用都是必须在创建时就初始化的。

    虽然对于普通的成员来说,使用成员初始化列表和在函数体中赋值没什么区别,但是对于本身是类对象的成员来说,使用成员初始化列表的效率更高。

    数据成员被初始化的顺序与它们出现在类声明中的顺序一致,而与初始化器中的排列顺序无关。

    不能将成员初始化列表语法用于构造函数之外的其他类方法。

    成员初始化列表使用的括号方式也可以用于常规初始化,即int game = 16;等同于 int game(16);这样,初始化内置类型就像初始化类对象一样,C++11允许以更加直观的方式进行类内初始化:

    class Classy{int mem1=10; const int mem2 = 20;};与 class Classy{int mem1; const int mem2;} Classy::Classy():mem1(10),mem2(20){}的效果是一样的。如果class Classy{int mem1=10; const int mem2 = 20;}; Classy::Classy():mem1(20){}这样,mem1的默认初始值将会被覆盖,但是mem2的值不能被覆盖。

    可以将复制构造函数和赋值运算符定义为私有成员函数,这样就可以避免在主调函数中使用对象初始化另一个对象或者将一个对象复制给另一个对象引起的错误(尤其是类中存在由new生成的成员时)。与其面对无法预料的运行故障,不如得到一个易于跟踪的错误,指出这些方法是不能访问的。

  • 相关阅读:
    实现翻页效果
    使用AHKActionSheet
    [翻译] GSProgressView
    [翻译] NSRegexTester
    下载时获取文件大小
    高级mask应用
    使用UILabel实现滚动字幕移动效果
    动画绘制水波纹
    能产生粒子效果的CAEmitterLayer
    使用UITableView实现图片视差效果
  • 原文地址:https://www.cnblogs.com/junwangustc/p/3598242.html
Copyright © 2020-2023  润新知