最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹

 更新時(shí)間:2021年09月07日 14:34:09   作者:我是小白呀  
這篇文章主要介紹了C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

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

在這里插入圖片描述

格式:

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

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

如果用戶自己沒有定義構(gòu)造函數(shù), C++ 系統(tǒng)會(huì)自動(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ù)幾乎總是對(duì)的
  • 通常在默認(rèn)構(gòu)造函數(shù)中, 給成員提供的初始值應(yīng)該指出該對(duì)象是 “空” 的

有參構(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)對(duì)象的生命期結(jié)束時(shí), 會(huì)自動(dòng)執(zhí)行析構(gòu)函數(shù). 析構(gòu)函數(shù)的名字是類名前面加一個(gè) “~” 符號(hào).

在這里插入圖片描述

格式:

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

析構(gòu)函數(shù)的作用在撤銷對(duì)象占用的內(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ī)

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

在這里插入圖片描述

局部對(duì)象

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

全局對(duì)象

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

到此這篇關(guān)于C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++ 構(gòu)造函數(shù) 析構(gòu)函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言聯(lián)合體的實(shí)現(xiàn)示例

    C語言聯(lián)合體的實(shí)現(xiàn)示例

    C語言聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),它允許在相同的內(nèi)存位置存儲(chǔ)不同的數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C語言指針基礎(chǔ)詳解

    C語言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語言指針的基礎(chǔ),主要對(duì)C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • 從匯編看c++中默認(rèn)構(gòu)造函數(shù)的使用分析

    從匯編看c++中默認(rèn)構(gòu)造函數(shù)的使用分析

    c++中,如果為一個(gè)類沒有明確定義一個(gè)構(gòu)造函數(shù),那么,編譯器就會(huì)自動(dòng)合成一個(gè)默認(rèn)的構(gòu)造函數(shù)。下面,通過匯編程序,來看一下其真實(shí)情況
    2013-05-05
  • C++泛型編程基本概念詳解

    C++泛型編程基本概念詳解

    這一篇介紹一下 C++ 編程中與面向?qū)ο蟛⒘械牧硪淮蠓种А盒途幊?,這一篇主要介紹函數(shù)模板、類模板和成員模板三大部分,需要的朋友可以參考下
    2021-08-08
  • C/C++中帶空格字符串的輸入講解

    C/C++中帶空格字符串的輸入講解

    這篇文章主要給大家介紹了關(guān)于如何解決C++中帶空格字符串的輸入問題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2021-09-09
  • C++11之后的decltype類型指示符詳解

    C++11之后的decltype類型指示符詳解

    為了滿足這一要求,C++11?新標(biāo)準(zhǔn)引入了另一種類型說明符?decltype?,它的作用是選擇并返回操作數(shù)的數(shù)據(jù)類型,這篇文章主要介紹了C++11之后的decltype類型指示符,需要的朋友可以參考下
    2023-01-01
  • c++代碼實(shí)現(xiàn)tea加密算法的實(shí)例詳解

    c++代碼實(shí)現(xiàn)tea加密算法的實(shí)例詳解

    這篇文章主要介紹了c++代碼實(shí)現(xiàn)tea加密算法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C++繼承介紹

    C++繼承介紹

    C++繼承可以是單一繼承或多重繼承,每一個(gè)繼承連接可以是public,protected,private也可以是virtual或non-virtual
    2013-01-01
  • 詳解C語言內(nèi)核字符串拷貝與比較

    詳解C語言內(nèi)核字符串拷貝與比較

    本文將探索一下字符串的拷貝與比較,與應(yīng)用層不同內(nèi)核字符串拷貝與比較也需要使用內(nèi)核專用的API函數(shù),字符串的拷貝往往伴隨有內(nèi)核內(nèi)存分配,我們將首先簡(jiǎn)單介紹內(nèi)核如何分配堆空間,然后再以此為契機(jī)簡(jiǎn)介字符串的拷貝與比較
    2022-09-09
  • C++超詳細(xì)梳理基礎(chǔ)知識(shí)

    C++超詳細(xì)梳理基礎(chǔ)知識(shí)

    這篇文章主要介紹了C++基礎(chǔ)概念,? 本次為C++的一個(gè)開篇,重點(diǎn)是更好的理解C++相對(duì)于其他編程語言的一個(gè)特性,之后會(huì)持續(xù)更新,本次專欄計(jì)劃是掌握C++的基礎(chǔ)語法以及常用特性,并且從細(xì)節(jié)上去理解,需要的朋友可以參考一下
    2022-06-06

最新評(píng)論

潢川县| 安福县| 灌云县| 靖西县| 介休市| 青田县| 阜城县| 黔东| 阳泉市| 青龙| 沂水县| 无极县| 榆中县| 青阳县| 贞丰县| 济阳县| 辽中县| 芦山县| 沙湾县| 松滋市| 浙江省| 双峰县| 德钦县| 加查县| 木里| 彰化市| 万全县| 塔河县| 茌平县| 兴山县| 扶绥县| 白朗县| 济源市| 闽清县| 子长县| 梁平县| 长寿区| 汪清县| 青海省| 岳池县| 柳林县|