您好,登錄后才能下訂單哦!
本篇內(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ù) (constructor) 是一種特殊的成員函數(shù). 它會在每次創(chuàng)建類的新對象時(shí)執(zhí)行. 構(gòu)造函數(shù)的名稱與類的名稱是完全相同的, 并且不會返回任何類型. 構(gòu)造函數(shù)可用于為某些成員變量設(shè)置初始值.
格式:
Class::Class(); // 構(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ù)中參數(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ù) (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)存之前完成一些清理 & 善后的工作.
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
對于函數(shù)中定義的自動(dòng)局部對象, 當(dāng)函數(shù)被調(diào)用結(jié)束時(shí), 對象釋放. 在對象釋放前自自動(dòng)執(zhí)行析構(gòu)函數(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í)用文章!
免責(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)容。