QT:MainWindow初始化列表解释
在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 博客链接2 2.实例如下 class A { ... private:int a; }; class B : public A { ... private:A &aa ...
- 为什么不能在子类的初始化列表里初始化父类的成员
好几次遇到此类问题了:便不得不找些资料弄明白它: 具体代码是: 2 3 4 5 6 7 8 9 10 class A { protected: int n_; }; class B : pub ...
- 初始化列表和构造函数内赋值的区别
1. 类的静态成员变量不能用参数初始化表初始化 (1) 如果声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,在运行的时候才为对象的数据成员分配空间.但是静态数据成员不属于 ...
- c++中的初始化列表详解
目录: 定义 使用初始化列表的原因 必须使用初始化列表的时候 成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号 ...
- C++初始化列表详解
目录: 定义 使用初始化列表的原因 必须使用初始化列表的时候 成员变量的顺序 定义 与其他函数不同,构造函数除了有名字,参数列表和函数体 ...
- 派生类参数初始化列表和基类构造函数顺序
今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...
- C++ 类构造函数初始化列表介绍
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式. 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个 ...
- 初始化列表的使用(十五)
我们之前在 C 语言中可以定义 const 成员,那么我们是否可以在类中定义 const 成员呢?我们来看看下面代码中的类定义是否合法呢?如果合法,ci 的值是什么,存储在哪里呢? #include ...
- C++类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public: int a; f ...
最新文章
- 利用存储过程完成定时备份数据
- Android使用SAX解析XML(6)
- 原生js的ajax请求
- 深度学习分布式训练小结
- 二叉树的常用操作(节点的后继节点)
- 零基础学python实战-零基础学习python_类和对象(36-40课)
- 目标检测(十八)--FPN
- PyTorch:数据读取2 - Dataloader
- GIS要学哪种计算机语言,做好一名ArcGIS开发人员所需要掌握的知识
- 【Linux c】sipc
- 疫情后的数字化转型:如何做好医疗数据治理
- SAXReader解析器--xml字符串文件解析
- 网易云音乐分析之推荐算法
- python有什么好玩的书_史上最全的Python书排行榜|你想知道的都在这里
- 彻悟人生,句句肺腑!!(被千万人转载的一篇文章)
- 半导体显示丨深天马A拟投资15亿元在武汉设立新型显示产业创新中心
- 有关实验室电源远程监控系统的设计与实现
- 正则验证手机号 6位验证码 身份证号
- 怎么修改科汛CMS导读的文字字数【已解决】
- cif和cip的区别_什么是CIP贸易条款?CIP与CIF有什么区别?
热门文章
- 如何提升软件交付效能?答案未必如你所想
- 中台不火,天理难容!
- 【JEECG示例文档】使用Kettle从mysql向oracle中抽取数据
- maven 项目上传私服pom配置
- hadoop--历史服务器配置
- 牛客小白月赛13-H(单调栈+树状数组)
- 27、简述redis的有哪几种持久化策略及比较?
- 数据导入导出 、 表记录基本操作 、 查询及匹配条件 、 多表查询 、
- 关于File.separator 文件路径:window与linux下路径问题(“No such file or diretory ”异常解决方案)...
- [译] Node.js, Express.js 搭建 HTTP/2 服务器