本系列 C++ 相關(guān)文章 僅為筆者學(xué)習(xí)筆記記錄,用自己的理解記錄學(xué)習(xí)!C++ 學(xué)習(xí)系列將分為三個(gè)階段:基礎(chǔ)篇、STL 篇、高階數(shù)據(jù)結(jié)構(gòu)與算法篇,相關(guān)重點(diǎn)內(nèi)容如下:
- 基礎(chǔ)篇:類與對(duì)象(涉及C++的三大特性等);
- STL 篇:學(xué)習(xí)使用 C++ 提供的 STL 相關(guān)庫;
- 高階數(shù)據(jù)結(jié)構(gòu)與算法篇: 手動(dòng)實(shí)現(xiàn)自己的 STL 庫 及 設(shè)計(jì)實(shí)現(xiàn)高階數(shù)據(jù)結(jié)構(gòu),如 B樹、B+樹、紅黑樹等。
學(xué)習(xí)集:
- C++ 入門到入土?。?!學(xué)習(xí)合集
- Linux 從命令到網(wǎng)絡(luò)再到內(nèi)核!學(xué)習(xí)合集
本期內(nèi)容:C++ 類的基本成員函數(shù):類類型成員與構(gòu)造函數(shù)問題
前期內(nèi)容: C++ 學(xué)習(xí) ::【基礎(chǔ)篇:12】:C++ 類的基本成員函數(shù):構(gòu)造函數(shù)基本的定義與調(diào)用 |(無參構(gòu)造與有參構(gòu)造及缺省參數(shù)式構(gòu)造)
目錄:
1. 問題引入
2. 類類型成員(自定義數(shù)據(jù)類型)的初始化與構(gòu)造函數(shù)
3. 相關(guān)文章推薦
【 C++學(xué)習(xí)合集鏈接 】
1. 問題引入
已知:如果類中沒有顯式定義構(gòu)造函數(shù),則C++編譯器會(huì)自動(dòng)生成一個(gè)無參的默認(rèn)構(gòu)造函數(shù),一旦用戶顯式定義編譯器將不再生成。
優(yōu)缺問題引出:
- C++ 中,參數(shù)可分為:基本數(shù)據(jù)類型(int、double、(任意類型指針)…)和 自定義數(shù)據(jù)類型(struct、class、…)
- C++ 對(duì),這兩種參數(shù)在自動(dòng)生成無參構(gòu)造時(shí)是不同的?。?!
- 對(duì)于基本數(shù)據(jù)類型,不做處理!
- 對(duì)于自定義數(shù)據(jù)類型回去調(diào)用自定義數(shù)據(jù)類型的:默認(rèn)構(gòu)造函數(shù)!
【 以下示例為使用兩個(gè)棧實(shí)現(xiàn)隊(duì)列示例的構(gòu)造函數(shù)探討! 】
代碼示例
#include<iostream>
using std::cout;
using std::endl;
typedef int DataType;
/* 定義一個(gè)棧的及其構(gòu)造函數(shù) */
class Stack {
public:
Stack(int capacity = 4) { // 結(jié)合參數(shù)缺省實(shí)現(xiàn):只要實(shí)例化必定是可用的棧(空間為:4)
_capacity = capacity;
_array = (DataType*)malloc(sizeof(DataType) * capacity); // 申請(qǐng)存儲(chǔ)空間
if (_array == nullptr) {
perror("malloc fail!\n");
return;
}
_size = 0;
}
private:
DataType* _array; // 順序存儲(chǔ)方式
int _capacity; // 記錄當(dāng)前棧的最大存儲(chǔ)量
int _size; // 記錄當(dāng)前棧中的元素個(gè)數(shù)
};
class Queue {
private:
Stack _st1;
Stack _st2;
};
int main() {
Stack stk;
Queue queue;
return 0;
}
2. 類類型成員(自定義數(shù)據(jù)類型)的初始化與構(gòu)造函數(shù)
由上示例代碼可知:對(duì)于自定義數(shù)據(jù)類型會(huì)去調(diào)用自定義數(shù)據(jù)類型的構(gòu)造函數(shù)!
這是 C++ 早期設(shè)計(jì)的一個(gè)缺陷:即對(duì)于C++的兩種類型使用了兩種原則進(jìn)行處理!
C++ 11:后官方給出了一個(gè)補(bǔ)丁 / 解決方案:即自定義數(shù)據(jù)類型在成員變量的聲明是可以賦默認(rèn)值!【注意點(diǎn):賦值不是在初始化,而是在指定缺省值!【給定缺省值實(shí)際是給構(gòu)造函數(shù)的初始化列表處進(jìn)行定義】】(代碼如下?。?/p>
#include<iostream>
using std::cout;
using std::endl;
typedef int DataType;
/* 定義一個(gè)棧的及其構(gòu)造函數(shù) */
class Stack { /* 不自定義構(gòu)造函數(shù) */
public:
private:
DataType* _array;
int _capacity = 4; // 不是初始化,而是相當(dāng)于指定缺省值
int _size = 0; // 不是初始化,而是相當(dāng)于指定缺省值
};
class Queue {
private:
Stack _st1;
Stack _st2;
};
int main() {
Stack stk;
Queue queue;
return 0;
}
文章來源:http://www.zghlxwxcb.cn/news/detail-473999.html
3. 相關(guān)文章推薦
1. C++ 學(xué)習(xí) ::【基礎(chǔ)篇:12】:C++ 類的基本成員函數(shù):構(gòu)造函數(shù)基本的定義與調(diào)用 |(無參構(gòu)造與有參構(gòu)造及缺省參數(shù)式構(gòu)造)文章來源地址http://www.zghlxwxcb.cn/news/detail-473999.html
到了這里,關(guān)于C++ 學(xué)習(xí) ::【基礎(chǔ)篇:13】:C++ 類的基本成員函數(shù):類類型成員的初始化與構(gòu)造函數(shù)問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!