網站首頁 編程語言 正文
1.前言
初始化就是給變量一個初始值。 初始化的目的是為了讓變量有值,防止使用時出現異常。
在構造函數中,有一項重要功能就是對成員變量進行初始化,一般我們采用兩個方法:
對成員變量賦值和采用初始化列表
2.初始化列表
在這之前我們來觀察一下樣例看這兩者之間有什么區別:
class Date
{
public:
Date(int year = 1900, int month = 1, int date = 1)
{
_year = year;
_month = month;
_date = date;
}//賦值
Date(int year = 1900, int month = 1, int date = 1)
:_year(year)
,_month(month)
,_date(date)
{}//初始化列表
}
顯然的,初始化列表是以冒號開始,然后緊跟著的是以逗號為分隔符的數據成員列表,每個數據成員后面都有一個括號,括號中的是該成員變量的初始值或表達式。其中語句:
_year(year),_month(month),_date(date)
其實就是相當于函數體內部的:
_year = year;_month = month;_date = date;
雖然說效率上沒有什么很大區別,但使書寫更加方便,尤其在成員變量較多時優勢更加突出
3.注意事項
1.成員變量的初始化順序與初始化列表中列出的變量的順序無關,它只與成員變量在類中聲明的順序有關。
如代碼所示:
#include<iostream>
using namespace std;
class A
{
public:
A(int a)
:_a1(a)
, _a2(_a1)
{}
void Print()
{
cout << _a1 << " " << _a2 << endl;
}
private:
int _a2;
int _a1;
};
int main()
{
A aa(1);
aa.Print();
}
結果:
出現上面結果,是因為我們在類的聲明中的順序決定了成員變量的賦值,所以在 A類 中先讓 _a2 賦值,然而 _a1還未賦值,所以_a2 的值為一個奇怪的數字。
2.一般類中我們還需要定義某些特殊成員變量,初始化 這些成員變量的唯一方法就是使用初始化列表。
如代碼所示:
class B {
private:
int& _b;
const int _len;
A _c;
int* _a;
public:
//B(int len, int b)
// : _len(len)
// ,_b(b)
// ,_c(0)
//{
// _a = new int[len];
//}
B(int len, int b)
{
_len = len;
_c = 0;
_b = b;
_a = new int[len];
}
};
該代碼中如果用賦值來初始化成員變量的話,會報出以下錯誤:
所以,當類中包含了:引用成員變量;const成員變量;自定義類型的成員變量時,必須將這些成員放在初始化列表中進行初始化。
結果:
原文鏈接:https://blog.csdn.net/qq_64109690/article/details/126696883
相關推薦
- 2024-07-14 Guava自加載緩存LoadingCache
- 2022-11-05 python?pandas?query的使用方法_python
- 2022-12-29 react如何將字符串轉義成html語句_React
- 2023-04-20 flex 的 三個參數:flex-grow、flex-shrink、flex-basis
- 2022-10-10 React實時預覽react-live源碼解析_React
- 2022-09-27 python常見運算符及用法小結_python
- 2022-03-06 Android中SurfaceFlinger工作原理_Android
- 2022-09-05 Spark Sql之count(distinct)分析&&學習&&驗
- 最近更新
-
- 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同步修改后的遠程分支