• MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)解析


    1、https://blog.csdn.net/weixin_41157654/article/details/80820520

    最近跟着前辈们打打下手,顺便研究研究代码,以前没怎么用过QT和C++语言,这次跟着前辈好好学习。在研究代码时看到这样的形式,很怪异,就在网上找了一下,发现有个解释的就转载了过来,学习学习,没想到是初始化。

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

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

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

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

        在C++中,A与B之间是继承关系,A与B之间可以用“:”连接,但是类是没有参数的。因此QMainWindow(parent)是不能理解为类的。

        如果不是类,那么最有可能的就是构造函数。现在假设QMainWindow(parent)为某类的构造函数,那么这个构造函数在这句代码中起到了什么作用呢?该怎么去理解这句代码?这个问题是我第一次碰到这句代码时在脑袋中产生的疑问(这属于C++的知识)。

        C++中,通过继承可以使类形成一种层次关系。在层次关系的根部的称之为基类,它负责定义在层次关系中所有类共同的成员;直接或者间接的从基类继承而来的称作派生类,它负责定义各自的特有成员。

        在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的数据成员但是因为无法继承基类的构造函数,所以才用这种方式初始化基类的数据成员。

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

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

    2、https://bbs.csdn.net/topics/380091458

    Dialog::Dialog(QWidget *parent):QDialog(parent)中的QDialog(parent)是什么意思?

    parent参数指定了Dialog的父窗口部件,如果是0,意味着该Dialog没有父对象。

  • 相关阅读:
    poj3041(最小顶点覆盖)
    High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
    hdu 3183 A Magic Lamp(RMQ)
    Android studio 中创建AIDL Service
    cocos2d-x 3.0正式版 cmd创建project以及一键创建project
    【Machine Learning】决策树案例:基于python的商品购买能力预测系统
    【Machine Learning】机器学习及其基础概念简介
    【Machine Learning】Python开发工具:Anaconda+Sublime
    【HanLP】HanLP中文自然语言处理工具实例演练
    【HanLP】资料链接汇总
  • 原文地址:https://www.cnblogs.com/wllwqdeai/p/10839326.html
Copyright © 2020-2023  润新知