问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

QT及C++中的构造函数与析构函数

创作时间:
作者:
@小白创作中心

QT及C++中的构造函数与析构函数

引用
CSDN
1.
https://m.blog.csdn.net/xieliru/article/details/137581028

一.概念

1.什么是构造函数

类的构造函数 是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void 。构造函数可用于为某些成员变量设置初始值。

2.什么是析构函数

析构函数是 C++ 中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的清理工作。析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)的情况下。

基本特性

  • 名称 :析构函数的名称由波浪号( ~ )后跟类名构成,如 ~MyClass() 。
  • 无返回值和参数 :析构函数不接受任何参数,也不返回任何值。
  • 自动调用 :当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用 delete 删除一个动态分配的对象),析构函数会被自动调用。
  • 不可重载 :每个类只能有一个析构函数。
  • 继承和多态 :如果一个类是多态基类,其析构函数应该是虚的。

二.C++示例

1.标准C++构造函数及类成员变量初始化:方法一

class Car {
public:
    QString brand;
    int year;

    Car(QString b, int y) {
        brand = b;
        year = y;
        qDebug() << "有参数构造函数调用";
    }

    void display() {
        qDebug() << "Brand: " << brand << ", Year: " << year;
    }
};

int main(int argc, char *argv[]) {
    Car myCar("小米SU7", 2024);
    myCar.display();
}

输出:

有参数构造函数调用
Brand: "小米SU7" , Year: 2024

2.标准C++构造函数及类成员变量初始化:方法二

class Car {
public:
    QString brand;
    int year;

    Car(QString b, int y) : brand(b), year(y) {
        qDebug() << "有参数构造函数调用";
    }

    void display() {
        qDebug() << "Brand: " << brand << ", Year: " << year;
    }
};

int main(int argc, char *argv[]) {
    Car myCar("小米SU7", 2024);
    myCar.display();
}

输出:

有参数构造函数调用
Brand: "小米SU7" , Year: 2024

三.QT中的构造函数与析构函数

1.建立一个mainwindow类工程

(1)mainwindow.h

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    int m_nrot;
    float value;
};

(2)mainwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow) {
    ui->setupUi(this);
}

MainWindow::~MainWindow() {
    delete ui;
}

其中:

  • MainWindow(QWidget *parent = nullptr); 即为构造函数
  • ~MainWindow(); 即为析构函数

2.类成员初始化方法

a.mainwindow.h 不用变化

b.mainwindow.cpp修改如下:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), m_nrot(1), value(0.2), ui(new Ui::MainWindow) {
    ui->setupUi(this);
    qDebug() << m_nrot << value;
}

MainWindow::~MainWindow() {
    delete ui;
}

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号