C++类的使用(二)—— explicit构造与const成员赋值
一、代碼實例
class Class { public:Class(int x){_x = x;}int getX(){return _x;}private:int _x; };Class object = 1;類的定義就不說了,可以參考本序列的第一篇類的使用(一)
關鍵是最后一行Class object = 1;
object的類型明明時Class,怎么可以賦值為1呢?
答案就在代碼第四行Class(int x)
這個構造為單參數構造函數,所以在創建對象時,可以用=來代替()
注意一定時創建對象,不能對已存在的對象進行賦值,比如下面這段代碼就會報錯
雖然和第一段代碼看上去沒什么區別,但其實本質完全不一樣
二、explicit標識
我們再看一段代碼
class Class { public:explicit Class(int x){_x = x;}int getX(){return _x;}private:int _x; };Class object = 1;好像沒什么區別嘛,就是在第四行多了一個explicit
其實區別大著呢,這段代碼會報錯,原因就在explicit
explicit在英文中時純凈的意思,在C++中放在構造函數前,指明這個構造函數不能用=代替()
所以explicit通常被用來限制一些間接型的構造函數,而僅允許直接型構造函數使用=,是一種代碼規范
三、const成員賦值
const變量本身不能更改,在類中也是這樣
可是一個類在被創建時總得有個初始值吧,如果成員變量中還有const變量,那怎么才能在構造函數賦值呢?
老規矩,先看代碼
只需要在構造函數的聲明后,加上:var(value)就行了
有多個const變量需要初始化用,連接::var1(value1),var2(value2),...
這種方法也可用于普通成員變量的賦值,但只能用于構造函數
本序列的文章:
C++類的使用(一)
C++類的使用(二)—— explicit構造與const成員變量賦值
C++類的使用(三)—— 封裝
C++類的使用(四)—— 繼承
C++類的使用(五)—— 多態
C++類的使用(六)—— 判斷繼承
總結
以上是生活随笔為你收集整理的C++类的使用(二)—— explicit构造与const成员赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt4 如何使用QHttp实现post和
- 下一篇: C++类的使用(三)—— 封装