網站首頁 編程語言 正文
C++類的構造函數初始值列表
1 通過構造函數初始值列表來初始化成員變量
C++中類的構造函數初始值列表可以對類的成員進行初始化。
class myClass{
? public:
? int i;
? myClass(): i(1)
? {
? }
};
其中,類myClass的構造函數中包含了初始值列表,對成員變量i進行初始化。
2 通過構造函數的函數體來初始化成員變量
除了通過構造函數初始值列表來初始化成員變量外,還可以通過構造函數的函數體來初始化成員變量。
class myClass{
? public:
? int i;
? myClass()
? {
? ? i = 1;
? }
};
此時,成員變量i的初始值是1。
3 類包含常量或引用成員變量
當類包含有常量成員變量或者引用成員變量時
class myClass{
public:
? int i;
? const int ci;
? int& ri;
};
如果類沒有定義構造函數,則使用默認的構造函數來創建對象
myClass mc;
此時,編譯器會報錯,報錯信息為“error C2280: “myClass::myClass(void)”: 嘗試引用已刪除的函數”。因此,需要編寫myClass類的構造函數對常量成員變量和引用成員變量進行初始化。
3.1 不能在構造函數的函數體來初始化常量或引用成員變量
在myClass類的構造函數體內對常量或引用成員變量進行初始化
myClass()
{
? i = 1;
? ci = 2;
? ri = i;
}
此時,編譯器會報錯,報錯信息為“ error C2789: “myClass::ci”: 必須初始化常量限定類型的對象”。
3.2 在類的構造函數初始值列表來初始化常量或引用成員變量
myClass():i(1),ci(2),ri(i)
{
}
此時,程序可以成功編譯。
C++類的構造函數的作用
構造函數的作用
為了解決給對象成員初始化賦值的問題,C++提供了“構造函數(constructor)”來處理對象的初始化。構造函數是一種特殊的成員函數,與其他成員函數不同,不需要用戶來調用它,而是在建立對象時自動執行。
構造函數的名字必須與類名同名,而不能由用戶任意命名,以便編譯系統能識別它并把它作為構造函數處理。構造函數不返回任何值,所以,函數沒有返回類型。
例如,定義一個C++類,類名是 student,如下:
class student?????? //以class開頭
{?? ... };
那么,構造函數的函數名與類名相同,所以,構造函數的函數名是student,例如:
student();????????????????????? //沒有參數的構造構造函數;
student(char* name);???? //帶參數的構造函數;
構造函數的功能是由用戶定義的,用戶根據初始化的要求設計函數體和函數參數。
在講解構造函數之前,我們先寫一個例子,測試構造函數的使用。
測試代碼如下:
程序的運行結果有:
在類student中定義了構造函數:
student(char* pn, char* pa, long long n);
構造函數的名稱和所在的類同名。在建立對象時自動執行構造函數,它的作用是對定義的對象進行初始化。例如給成員變量賦初值,賦值語句是寫在構造函數的函數體中,只有在調用構造函數的時候,才執行這些賦值語句,為當前對象的成員變量賦值。
在上面的例子中,我們定義了stud對象,在定義對象的同時,給對象的成員變量賦值。
定義對象如下:
student stud("wkf", "www.mylinux.vip", 13926572996);
此時,定義stud對象,給對象設置3個數據,根據這些數據的類型,就調用對應的構造函數:
student(char* pn, char* pa, long long n);
所以,把參數設置到對應的構造函數中,如下:
pn = "wkf";
pa = "www.mylinux.vip";
n = 13926572996;
給構造函數的參數設置數據之后,就執行構造函數。
上面是在類內定義構造函數,也可以只在類內對構造函數進行聲明,而在類外定義構造函數。在類外定義構造函數,如下:
可以看到,把student(char* pn, char* pa, long long n);構造函數放在類外定義。
有關構造函數的使用,有以下說明:
(1) 構造函數的名稱,與類名一樣。
(2) 什么時候調用構造函數?定義類對象的時候,開始構建對象,調用類的構造函數。
(3) 構造函數沒有返回值,因此,也不需要在定義構造函數時聲明函數返回類型,這是它和一般函數的一個重要的不同之點,不能寫成:
void student ()
{.....}
構造函數的作用主要是用來對對象進行初始化。
(4) 構造函數是建立對象時由系統自動執行的,而且只執行一次。所以,構造函數不能夠由用戶調用。
(5) 在構造函數的函數體中不僅可以對成員變量賦初值,而且,可以包含其他語句,例如cout語句。但是,一般不提倡在構造函數中加入與初始化無關的內容。
原文鏈接:https://blog.csdn.net/hou09tian/article/details/109594572
相關推薦
- 2022-04-10 微信小程序canvas drawImage 圖片展示的方法
- 2022-05-01 教你利用python如何讀取txt中的數據_python
- 2022-02-28 ERROR in Entry module not found: Error: Can't reso
- 2022-12-12 python語法之通過value找key問題_python
- 2022-06-28 react18中react-redux狀態管理的實現_React
- 2022-12-09 解讀opencv中cv2.imread()返回值為None問題及解決_python
- 2022-11-25 Go實現快速生成固定長度的隨機字符串_Golang
- 2023-01-12 使用scipy.optimize的fsolve,root函數求解非線性方程問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支