在mianWindow.cpp中第一行代码如下。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{/***/
}

这是C++继承,说明 MainWindow 的构造函数之前需要调用父类 QMainWindow 的带有参数的构造函数。

class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:}

MianWindow是一个类,“::”(作用域区分符)后面跟着的是一个构造函数。但是这个构造函数之后的“:”后面的QMainWindow(parent)该怎样去理解呢?

在C++中,当创建一个对象时,编译器要保证调用了所有子对象的构造函数,这是C++强制要求的,也是它的一个机制。

现在有一个派生类A,它继承基类B。现在问题是:使用A类创建一个对象后,怎样初始化它从类B中继承过来的数据成员?(子类是无法继承父类的构造函数和析构函数的)。总结下:因为初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数,如果不指定,编译器则会调用基类的默认构造函数。

代码中QMainWindow(parent)是基类构造函数

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent)

构造函数后面括号内的参数表列中只有参数但无参数类型,因为在这里不是定义基类构造函数,而是调用基类构造函数,因此这些参数是实参而不是形参。他们可以是常量、全局变量和派生类构造函数总参数表中的参数。 先初始化父类成员变量,从而间接初始化子类从父类继承过来的成员变量。

这个问题就是使用上面的那行代码来解决的。首先QMainWindow是父类(基类)而MainWindow是子类(派生类),他们是继承关系;MainWindow(QWidget *parent)是类MainWindow的构造函数,QMainwindow(parent)是类QMainwindow的构造函数。类Mainwindow在实现构造函数时,要初始化基类QMainwindow的数据成员但是因为无法继承基类的构造函数,所以才用这种方式初始化基类的数据成员。

说一下,这种代码的具体格式

派生类::派生类构造函数(总参数列表):基类构造函数(参数列表)  //基类构造函数的参数列表是实参。
{
派生类中的数据成员初始化;

}


==> add:

至于ui(new Ui::MainWindow),就是一个成员变量,通过初始化列表进行初始化

当然,也可以不用初始化列表的方式对ui定义,而是在函数内部进行

//对父类进行初始化
//调用格式为“子类构造函数 : 父类构造函数”,
//如下,其中QMainWindow是MainWindow的父类:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent)
//    ui(new Ui::MainWindow)//对类成员进行初始化
{ui = new Ui::MainWindow;ui->setupUi(this);***
}
												

QT:MainWindow初始化列表解释相关推荐

  1. 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况(转载)

    1.参考博客 博客链接1 博客链接2 2.实例如下 class A { ... private:int a; }; class B : public A { ... private:A &aa ...

  2. 为什么不能在子类的初始化列表里初始化父类的成员

    好几次遇到此类问题了:便不得不找些资料弄明白它: 具体代码是: 2 3 4 5 6 7 8 9 10 class A { protected:     int n_; }; class B : pub ...

  3. 初始化列表和构造函数内赋值的区别

    1.  类的静态成员变量不能用参数初始化表初始化 (1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,在运行的时候才为对象的数据成员分配空间.但是静态数据成员不属于 ...

  4. c++中的初始化列表详解

    目录: 定义 使用初始化列表的原因 必须使用初始化列表的时候 成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号 ...

  5. C++初始化列表详解

    目录:         定义         使用初始化列表的原因         必须使用初始化列表的时候         成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体 ...

  6. 派生类参数初始化列表和基类构造函数顺序

    今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...

  7. C++ 类构造函数初始化列表介绍

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式. 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个 ...

  8. 初始化列表的使用(十五)

    我们之前在 C 语言中可以定义 const 成员,那么我们是否可以在类中定义 const 成员呢?我们来看看下面代码中的类定义是否合法呢?如果合法,ci 的值是什么,存储在哪里呢? #include ...

  9. C++类构造函数初始化列表

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public:     int a;     f ...

最新文章

  1. 利用存储过程完成定时备份数据
  2. Android使用SAX解析XML(6)
  3. 原生js的ajax请求
  4. 深度学习分布式训练小结
  5. 二叉树的常用操作(节点的后继节点)
  6. 零基础学python实战-零基础学习python_类和对象(36-40课)
  7. 目标检测(十八)--FPN
  8. PyTorch:数据读取2 - Dataloader
  9. GIS要学哪种计算机语言,做好一名ArcGIS开发人员所需要掌握的知识
  10. 【Linux c】sipc
  11. 疫情后的数字化转型:如何做好医疗数据治理
  12. SAXReader解析器--xml字符串文件解析
  13. 网易云音乐分析之推荐算法
  14. python有什么好玩的书_史上最全的Python书排行榜|你想知道的都在这里
  15. 彻悟人生,句句肺腑!!(被千万人转载的一篇文章)
  16. 半导体显示丨深天马A拟投资15亿元在武汉设立新型显示产业创新中心
  17. 有关实验室电源远程监控系统的设计与实现
  18. 正则验证手机号 6位验证码 身份证号
  19. 怎么修改科汛CMS导读的文字字数【已解决】
  20. cif和cip的区别_什么是CIP贸易条款?CIP与CIF有什么区别?

热门文章

  1. 如何提升软件交付效能?答案未必如你所想
  2. 中台不火,天理难容!
  3. 【JEECG示例文档】使用Kettle从mysql向oracle中抽取数据
  4. maven 项目上传私服pom配置
  5. hadoop--历史服务器配置
  6. 牛客小白月赛13-H(单调栈+树状数组)
  7. 27、简述redis的有哪几种持久化策略及比较?
  8. 数据导入导出 、 表记录基本操作 、 查询及匹配条件 、 多表查询 、
  9. 关于File.separator 文件路径:window与linux下路径问题(“No such file or diretory ”异常解决方案)...
  10. [译] Node.js, Express.js 搭建 HTTP/2 服务器