【C++grammar】C++類數據成員的初始化

目錄

    • 1、類成員的就地初始化example
    • 2、構造函數初始化
    • 3、默認構造函數:Default Constructor
    • 4、舉例
    • 5、成員的初始化方法的優先級

1、類成員的就地初始化example

class S { int m = 7; // ok, copy-initializes m  int n(7);  // 錯誤:不允許用小括號初始化  std::string s{'a', 'b', 'c'}; // ok, direct list-initializes sstd::string t{"Constructor run"}; // okint a[] = {1,2,3}; // 錯誤:數組類型成員不能自動推斷大小 int b[3] = {1,2,3}; // ok// 引用類型的成員有一些額外限制,參考標準
public:S() { } 
};

2、構造函數初始化

在這里插入圖片描述
在這里插入圖片描述

A data field is an object type (Object in Object / Embedded Object) (類的數據域是一個對象類型,被稱為對象中的對象,或者內嵌對象)
The embedded object must be constructed before the body of ctor is executed (內嵌對象必須在被嵌對象的構造函數體執行前就構造完成)

class Time { /* Code omitted */ }
class Action {
public:Action(int hour, int minute, int second) {time = Time(hour, minute, second); //time對象應該在構造函數體之前構造完成}
private:Time time;
}; 
Action a(11, 59, 30);

解釋time是Time的對象,是Action的內嵌對象
需要注意的地方:
在構造函數的函數體中,不可以初始化類的數據成員
構造函數的函數體執行之前,類中的數據成員必須完成初始化

3、默認構造函數:Default Constructor

默認構造函數是可以無參調用的構造函數,既可以是定義為空參數列表的構造函數,也可以是所有參數都有默認參數值的構造函數

class Circle1 {
public:Circle1() {      // 無參數radius = 1.0; /*函數體可為空*/}
private:double radius;
};
class Circle2 {
public:Circle2(double r = 1.0) // 所有參數都有默認值: radius{ r } {}
private:double radius;
};

在這里插入圖片描述

4、舉例

class Circle {
private:double radius;
public:double getArea() {return 3.14 * radius * radius;}
};
class Square {
private:double side;
public:double getArea() {return side * side;}
};
class Combo {
private:Circle c;Square s;};int main()
{Combo o{};cout<<o.c.getArea() << endl;return 0;
}

此時,c對象是個私有的,所以不能直接訪問
在這里插入圖片描述
有關代碼:

class Circle {
private:double radius;
public://指示編譯器生成無參構造函數Circle() = default;//構造函數Circle(double r) {radius = r;}double getArea() {return 3.14 * radius * radius;}
};
class Square {
private:double side;
public://指示編譯器不構造默認構造函數//Square() = delete;//            私有數據成員side  double sideSquare(double side) :side{ side } {}//或者寫成/*Square(double side){this->side = side;}*/double getArea() {return side * side;}
};
class Combo {
public:Circle c;Square s;//構造函數.內嵌對象的構造必須在構造函數體之前就完成了Combo() :s{1.0} {}
};int main()
{Combo o{};cout<<o.c.getArea() << endl;return 0;
}

在這里插入圖片描述

5、成員的初始化方法的優先級

在這里插入圖片描述
一個成員同時有就地初始化和構造函數列表初始化,則就地初始化語句被忽略不執行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二十一、人臉檢測

一、識別圖像中的人臉 haarcascade_frontalface_alt_tree.xml lbpcascade_frontalcatface.xml GitHub上有Haar級聯檢測器源代碼可自行下載&#xff0c;lbp級聯檢測器也一樣有源碼可自行下載 也一樣 import cv2 as cv import numpy as npdef face_detect(image):gray cv.cvtC…

aspx特殊符號說明

http://www.cnblogs.com/GnagWang/archive/2010/07/14/1777130.html轉載于:https://www.cnblogs.com/mingyongcheng/archive/2011/11/24/2261253.html

javascript運算符_JavaScript中的按位運算符

javascript運算符JavaScript按位運算符 (JavaScript Bitwise Operators) A lot of times you come across some strange operators where youre knocking your head to understand what is going on in the code. Almost all the programming languages have bitwise operators…

[置頂] Android的IPC訪問控制設計與實現

3.3.1 IPC鉤子函數設計與實現 IPC Binder是Android最重要的進程間通信機制&#xff0c;因此&#xff0c;必須在此實施強制訪問控制。 1. 修改secuirty.h 打開終端shell&#xff0c;輸入指令“cd /android4.0/kernel/goldfish/include/linux/vim security.h”&#xff0c;找到結…

TensorFlow在Anaconda環境下創建

一、我使用的是Anaconda自帶的Jupyter編譯器&#xff0c;詳細的安裝教程可以參考博文 二、之后打開Jupyter 三、進行測試 我的tensorflow使用的是2.0版本 import tensorflow.compat.v1 as tf tf.disable_v2_behavior()a tf.constant([1.0,2.0],name"a") b tf.co…

leetcode 654. 構造最大二叉樹 思考分析

題目 給定一個不含重復元素的整數數組。一個以此數組構建的最大二叉樹定義如下&#xff1a; 二叉樹的根是數組中的最大元素。 左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。 右子樹是通過數組中最大值右邊部分構造出的最大二叉樹。 通過給定的數組構建最大二叉樹&am…

Memcache的命令以及狀態監控

輸入telnet 127.0.0.1 11211&#xff08;memcached默認端口為11211&#xff09; stats &#xff1a;使用stats命令查看當前memcache服務器的狀態 pidmemcache服務器的進程IDuptime服務器已經運行的秒數time服務器當前的unix時間戳versionmemcache版本pointer_size當前操作系統 …

flush python_帶有示例的Python File flush()方法

flush python文件flush()方法 (File flush() Method) flush() method is an inbuilt method in Python, it is used to clear/flush the internal buffer, it is best practice while working with fila handling in Python, the internal buffer can be cleared before writin…

c++ 請拋棄匈牙利命名法 - 變量命名代碼風格的建議。

我只針對c碼農們講&#xff0c;其他語言不了解不過應該大同小異。曾幾何時翻開21天學通c系列等腦殘入門書&#xff0c;都以匈牙利命名法示人&#xff08;DWORD dwXXX, int nXXX, string strXXX)。現在我可以負責任的告訴你&#xff0c;把類型名寫在前面屁用都沒有&#xff0c;對…

Pycharm更換anaconda環境空間

一、File—>Settings 或者直接快捷鍵 CtrlAltS 二、找到自己的項目—>Project Interpreter—>找到需要使用的anaconda環境空間 三、Add Local 四、G:\Anaconda3\envs\mask_rcnn\python.exe一般anaconda的envs文件夾下&#xff0c;找到你的環境空間名稱&#xff0c;…

android 應用demo截圖

ksoap2實現天氣預報 Frame 動畫 baidu map 轉載于:https://www.cnblogs.com/java20130726/archive/2011/11/28/3218328.html

leetcode 617. 合并二叉樹 思考分析

題目 給定兩個二叉樹&#xff0c;想象當你將它們中的一個覆蓋到另一個上時&#xff0c;兩個二叉樹的一些節點便會重疊。 你需要將他們合并為一個新的二叉樹。合并的規則是如果兩個節點重疊&#xff0c;那么將他們的值相加作為節點合并后的新值&#xff0c;否則不為 NULL 的節點…

python 示例_帶有示例的Python File write()方法

python 示例文件write()方法 (File write() Method) write() method is an inbuilt method in Python, it is used to write the content in the file. write()方法是Python中的內置方法&#xff0c;用于將內容寫入文件中。 Syntax: 句法&#xff1a; file_object.write(text…

如何關掉Microsoft Office Click-to-Run服務

很煩&#xff0c;一開電腦就出現 一、打開任務管理器(CtrlShiftEsc) 服務—>打開服務 二、找到Microsoft Office Click-to-Run Service 右擊&#xff0c;選擇屬性 三、禁用即可

[2013-08-19] nohup的使用

前幾天自擺了一個烏龍。 由于項目中用到memcache&#xff1b;在linux機器上安裝了該服務后&#xff0c;啟動并且通過 & 設置到后臺進程&#xff1b; 由于要指定某些服務端口&#xff0c;然后發現經常服務被“莫名其妙”地關閉了。我以為是別人手動關掉了&#xff0c;或者說…

友盟—安卓巴士【Android開發原創教程大賽】

Android開發原創教程大賽正式拉開序幕了&#xff0c;由國內最專業的移動開發者服務及統計平臺-友盟提供豐厚的話費獎品哦&#xff0c;為所有愛寫教程的開發者提供的一份獎勵。 活動時間&#xff1a;2011年11月29日——2011年12月21日 征集期&#xff1a;2011年…

leetcode 700. 二叉搜索樹中的搜索 思考分析

目錄題目1、不考慮BST性質&#xff0c;直接遞歸遍歷2、回顧BST性質3、利用BST性質進行遍歷4、簡單的迭代方法題目 給定二叉搜索樹&#xff08;BST&#xff09;的根節點和一個值。 你需要在BST中找到節點值等于給定值的節點。 返回以該節點為根的子樹。 如果節點不存在&#xf…

一、環境準備

一、前提已安裝好anaconda 二、打開cmd命令窗口 conda activate激活base環境 conda create -n pytorch python3.6創建一個名稱為pytorch的環境空間&#xff0c;其中使用的python版本為3.6 conda env list查看當前都有哪些環境 conda activate pytorch 激活剛安裝的環境 pip l…

Java技能優化集錦

Java技能優化集錦 1 通用篇 “通用篇”討論的問題適合于大多數Java應用。 1.1 不用new關鍵詞創建類的實例 用new關鍵詞創建類的實例時&#xff0c;構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable接口&#xff0c;我們可以調用它的clon…

java treemap_Java TreeMap size()方法與示例

java treemapTreeMap類的size()方法 (TreeMap Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size of this TreeMap or in other words, we can say it returns the number of…