日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++学习——类的初始化

發(fā)布時間:2024/7/19 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++学习——类的初始化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1.類通過構(gòu)造函數(shù)進行數(shù)據(jù)成員初始化
    • 2.類成員初始化方式?
    • 3.什么情況下必須使用列表初始化?
    • 4.為什么用列表初始化成員變量會快一些?
    • 5.派生類構(gòu)造函數(shù)的執(zhí)行順序

1.類通過構(gòu)造函數(shù)進行數(shù)據(jù)成員初始化

一般來說,類中的數(shù)據(jù)成員是私有的,不能通過對象共有訪問的方式對數(shù)據(jù)成員賦初始值。一般來說,構(gòu)造函數(shù)就是用來用來在創(chuàng)建對象時初始化對象, 為對象數(shù)據(jù)成員賦初始值。
構(gòu)造函數(shù)是類的一種特殊成員函數(shù),不需要人為調(diào)用,而是在建立對象時自動被執(zhí)行。

2.類成員初始化方式?

賦值初始化,通過在函數(shù)體內(nèi)進行賦值初始化; 列表初始化,在冒號后使用初始化列表進行初始化。 這兩種方式的主要區(qū)別在于:對于在函數(shù)體中初始化,是在所有的數(shù)據(jù)成員被分配內(nèi)存空間后才進行的。列表初始化是給數(shù)據(jù)成員分配內(nèi)存空間時就進行初始化, 就是說分配一個數(shù)據(jù)成員只要冒號后有此數(shù)據(jù)成員的賦值表達式(此表達式必須是括號賦值表達式), 那么分配了內(nèi)存空間后在進入函數(shù)體之前給數(shù)據(jù)成員賦值, 就是說初始化這個數(shù)據(jù)成員此時函數(shù)體還未執(zhí)行。

列表初始化:

#include<iostream> using namespace std;class solution { public:solution(int value1,int value2):a(value1),b(value2){}//列表初始化void print() {cout << "a=" << a << " " << "b=" << b << endl;} private:int a;int b; }; int main() {solution s(1, 2);s.print();return 0; }

賦值初始化:

#include<iostream> using namespace std;class solution { public:solution(int value1,int value2){a = value1;b = value2;}//列表初始化void print() {cout << "a=" << a << " " << "b=" << b << endl;} private:int a;int b; }; int main() {solution s(1, 2);s.print();return 0; } a=1 b=2

3.什么情況下必須使用列表初始化?

必須使用成員初始化的四種情況:

當(dāng)初始化一個引用成員時;當(dāng)初始化一個常量成員時;當(dāng)調(diào)用一個基類的構(gòu)造函數(shù),而它擁有一組參數(shù)時;當(dāng)調(diào)用一個成員類的構(gòu)造函數(shù),而它擁有一組參數(shù)時; #include<iostream> using namespace std;class solution { public:solution(int& value1,int value2):a(value1),b(value2){}//正確,列表初始化/*solution(int& value1, int value2) {a = value1;b = value2;}//錯誤,賦值初始化*/void print() {cout << "a=" << a << " " << "b=" << b << endl;} private:int& a;int b; }; int main() {int a = 1;solution s(a, 2);s.print();return 0; }

4.為什么用列表初始化成員變量會快一些?

賦值初始化是在構(gòu)造函數(shù)當(dāng)中做賦值的操作,而列表初始化是做純粹的初始化操作。我們都知道,C++的賦值操作是會產(chǎn)生臨時對象的。臨時對象的出現(xiàn)會降低程序的效率。

5.派生類構(gòu)造函數(shù)的執(zhí)行順序

虛擬基類的構(gòu)造函數(shù)(多個虛擬基類則按照繼承的順序執(zhí)行構(gòu)造函數(shù))。基類的構(gòu)造函數(shù)(多個普通基類也按照繼承的順序執(zhí)行構(gòu)造函數(shù))。類類型的成員對象的構(gòu)造函數(shù)(按照初始化順序)派生類自己的構(gòu)造函數(shù)。 #include<iostream> using namespace std;//虛基類 class A { public:A(int value) :a(value) {cout << "A的初始化" << endl;} private:int a; };//基類 class B { public:B(int value) :b(value) {cout << "B的初始化" << endl;} private:int b; };//類類型的成員 class C { public:C() {cout << "C的初始化" << endl;} };//派生類 class D:public B,virtual public A { public:D(int value1, int value2) :B(value1), A(value2) {//初始化順序和初始化列表的順序無關(guān),構(gòu)造函數(shù)的初始化順序按照一定規(guī)則進行。cout << "D的初始化" << endl;} private:C c; }; int main() {D d(1, 2);return 0; } A的初始化 B的初始化 C的初始化 D的初始化

總結(jié)

以上是生活随笔為你收集整理的C++学习——类的初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。