zoukankan      html  css  js  c++  java
  • C++子类的构造函数后面加:冒号的作用(转)

    在C++类的构造函数中经常会看到如下格式的写法:
    
    MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(parent,flag)
    上述语句中单冒号(:)的作用是表示后面是初始化列表,一般有三种使用场景。
    
    1、对父类进行初始化 (目的是什么呢?在创建子类对象时,能够把参数传给父类,从而完成对父类的初始化.子类构造函数必须要调用父类的构造函数(无论显式还是隐式))
    
    调用格式为“子类构造函数 : 父类构造函数”,如下,其中QMainWindow是MyWindow的父类:
    
    MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(parent,flag)
    另一个例子是自己当时写的设计模式的例子:https://www.cnblogs.com/Stephen-Qin/p/12180953.html
    2、对类成员进行初始化 调用格式为“构造函数 : A(初始值),B(初始值),C(初始值)……”,如下,其中A、B、C分别是类的成员变量: class rectangle //头文件中类定义 { public: rectangle( int pointX, int pointY, int Width, int Length ); private: CPoint m_point; int m_Width; int m_Length; }; rectangle::rectangle(int pointX, int pointY, int Width, int Length) : m_point(pointX,pointY),m_Width(Width),m_Length(Length)//源文件中构造函数实现 { todo...... }

    注意这里的m_point(pointX, pointY)是一种有参构造的形式.目前自己的理解是,初始化列表中的自定义类型的成员(比如这里的m_point)初始化时,()中的是它的参数,进行的是有参构造(这里是2个参数,很容易看出来.但如果是一个参数的话,很容易误认为是赋值)
    当然,上面构造函数的实现与下面的写法等价 rectangle::rectangle(
    int pointX, int pointY, int Width, int Length)//源文件中构造函数实现 { m_point.X = pointX; m_point.Y = pointY; m_Width = Width; m_Length = Length; todo...... } 3、对类的const成员变量进行初始化 由于const成员变量的值无法在构造函数内部初始化,因此只能在变量定义时赋值或使用初始化列表赋值。 对于2、3中的应用场景,有以下两点说明: 1、构造函数列表初始化执行顺序与成员变量在类中声明顺序相同,与初始化列表中语句书写先后无关。 2、相对于在构造函数中赋值,初始化列表执行效率更高。 ———————————————— 版权声明:本文为CSDN博主「lusirking」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lusirking/article/details/83988421
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11522760.html
Copyright © 2011-2022 走看看