溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的實(shí)例介紹

發(fā)布時(shí)間:2021-09-07 16:54:24 來源:億速云 閱讀:141 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的實(shí)例介紹”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目錄
  • 構(gòu)造函數(shù)

  • 默認(rèn)構(gòu)造函數(shù)

  • 有參構(gòu)造函數(shù)

  • 析構(gòu)函數(shù)

  • 析構(gòu)函數(shù)例子

  • 析構(gòu)函數(shù)執(zhí)行時(shí)機(jī)

    • 局部對象

    • 全局對象

構(gòu)造函數(shù)

構(gòu)造函數(shù) (constructor) 是一種特殊的成員函數(shù). 它會在每次創(chuàng)建類的新對象時(shí)執(zhí)行. 構(gòu)造函數(shù)的名稱與類的名稱是完全相同的, 并且不會返回任何類型. 構(gòu)造函數(shù)可用于為某些成員變量設(shè)置初始值.

格式:

Class::Class(); // 構(gòu)造函數(shù)

默認(rèn)構(gòu)造函數(shù)

如果用戶自己沒有定義構(gòu)造函數(shù), C++ 系統(tǒng)會自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù). 這個(gè)構(gòu)造函數(shù)體是空的, 沒有參數(shù), 不執(zhí)行初始化操作.

例如:

Time.h:

class Time {
private:
    int hour;
    int minute;
    int second;
public:
    Time(); // 默認(rèn)構(gòu)造函數(shù)
    void set_time(int h, int m, int s);
    void show_time();
};

Time.cpp:

#include "Time.h"
#include <iostream>

using namespace std;

Time::Time() {
    hour = 0;
    minute = 0;
    second = 0;
}

void Time::set_time(int h, int m, int s) {
    hour = h;
    minute = m;
    second = s;
}

void Time::show_time() {
    cout << hour << ":" << minute << ":" << second << endl;
}

main:

#include "Time.h"
#include <iostream>

using namespace std;

int main() {

    Time time1;  // 實(shí)例化time
    time1.show_time();  // 調(diào)用show_time

    return 0;
}

輸出結(jié)果:

0:0:0

重點(diǎn):

  • 即使提供了其他構(gòu)造函數(shù), 提供一個(gè)默認(rèn)構(gòu)造函數(shù)幾乎總是對的

  • 通常在默認(rèn)構(gòu)造函數(shù)中, 給成員提供的初始值應(yīng)該指出該對象是 “空” 的

有參構(gòu)造函數(shù)

構(gòu)造函數(shù)中參數(shù)可以指定默認(rèn)值. 如果童虎不指定實(shí)參指, 編譯西永就使形參取默認(rèn)值.

例如:

Time 類:

#ifndef PROJECT1_TIME_H
#define PROJECT1_TIME_H

class Time {
private:
    int hour;
    int minute;
    int second;
public:
    Time();  // 默認(rèn)構(gòu)造函數(shù)
    Time(int h, int m=0, int s=0);  // 有參構(gòu)造函數(shù)
    void show_time();
};

#endif //PROJECT1_TIME_H

Time.cpp:

#include "Time.h"
#include <iostream>
using namespace std;

// 默認(rèn)構(gòu)造函數(shù)
Time::Time() : hour(0), minute(0), second(0) {}

// 有參構(gòu)造函數(shù)
Time::Time(int h, int m, int s) : hour(h), minute(m), second(s) {}


void Time::show_time() {
    cout << hour << ":" << minute << ":" << second << endl;
}

main:

#include "Time.h"
#include <iostream>
using namespace std;

int main() {

    Time time1;
    time1.show_time();

    Time time2(8);
    time2.show_time();

    Time time3(8, 8);
    time3.show_time();
    
    Time time4(8, 8, 8);
    time4.show_time();

    return 0;
}

輸出結(jié)果:

0:0:0
8:0:0
8:8:0
8:8:8

析構(gòu)函數(shù)

析構(gòu)函數(shù) (destructor) 也是一個(gè)特殊的成員函數(shù). 當(dāng)對象的生命期結(jié)束時(shí), 會自動(dòng)執(zhí)行析構(gòu)函數(shù). 析構(gòu)函數(shù)的名字是類名前面加一個(gè) “~” 符號.

格式:

Class::~Class();  // 析構(gòu)函數(shù)

析構(gòu)函數(shù)的作用在撤銷對象占用的內(nèi)存之前完成一些清理 & 善后的工作.

析構(gòu)函數(shù)例子

Student 類:

#ifndef PROJECT1_STUDENT_H
#define PROJECT1_STUDENT_H

#include <string>
using namespace std;

class Student {
private:
    int num;
    string name;
    char gender;
public:
    Student();
    Student(int num, string name, char gender);
    ~Student();
    void display();
};

#endif //PROJECT1_STUDENT_H

Student.cpp:

#include "Student.h"
#include <iostream>
using namespace std;

// 無參構(gòu)造
Student::Student() : num(-1), name("None"), gender('N') {}

Student::Student(int n, string p, char g) : num(n), name(p), gender(g) {
    cout << "執(zhí)行構(gòu)造函數(shù): " << "Welcome, " << name << endl;
}

void Student::display() {
    cout << "num: " << num << endl;
    cout << "name: " << name << endl;
    cout << "gender: " << gender << endl;
    cout << "===============" << endl;
}

Student::~Student() {
    cout << "執(zhí)行析構(gòu)函數(shù): " << "Bye bye, " << name << endl;
}

main:

#include "Student.h"
#include <iostream>
using namespace std;

int main() {

    Student student1(1, "Little white", 'f');
    Student student2(2, "Big white", 'f');

    student1.display();
    student2.display();

    return 0;
}

輸出結(jié)果:

執(zhí)行構(gòu)造函數(shù): Welcome, Little white
執(zhí)行構(gòu)造函數(shù): Welcome, Big white
num: 1
name: Little white
gender: f
===============
num: 2
name: Big white
gender: f
===============
執(zhí)行析構(gòu)函數(shù): Bye bye, Big white
執(zhí)行析構(gòu)函數(shù): Bye bye, Little white

析構(gòu)函數(shù)執(zhí)行時(shí)機(jī)

對于函數(shù)中定義的自動(dòng)局部對象, 當(dāng)函數(shù)被調(diào)用結(jié)束時(shí), 對象釋放. 在對象釋放前自自動(dòng)執(zhí)行析構(gòu)函數(shù).

C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的實(shí)例介紹

局部對象

static 局部對象只在 main 函數(shù)結(jié)束或調(diào)用 exit 函數(shù)結(jié)束程序時(shí), 調(diào)用 static 局部對象的洗后函數(shù).

全局對象

對于全局對象, 在程序的流程離開其作用域時(shí) (如 main 函數(shù)結(jié)束或調(diào)用 exit 函數(shù)) 時(shí), 調(diào)用該全局對象的析構(gòu)函數(shù).

“C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的實(shí)例介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI