例一(類初始化錯誤用法):
struct thing
{
char * pn;
int m;
};
thing amabob = {"wodget", -23}; // valid initialization
Stock hot = {"Sukie's Autos, Inc.", 200, 50.25}; // No! compile error
出錯原因:資料訪問狀態私有(可改為公有,但違背資料隱藏的初衷)
特殊成員函式——類建構式(可用于類初始化):
專門用于構造新物件(創建物件)、將值賦給它們的資料成員(初始化),
- 原型位于類宣告的公有部分
- 沒有宣告型別,名稱與類名相同
- 程式宣告物件時,將自動呼叫建構式
- 引數名不能與類成員名相同
- 原因:此時建構式內直接使用類成員名稱會發生混亂
- 解決
- 方案一:資料成員名中使用m_前綴
- 方案二:成員名中使用后綴_
使用建構式:
- 顯示呼叫:
Stock food = Stock("World Cabbage", 250, 1.25); // 顯示呼叫 - 隱式呼叫:
Stock garment("Furry Mason", 50, 2.5) // 隱式呼叫結構更緊湊
- 可以與new結合使用:
Stock *pstock = new Stock("Electroshock Games", 18, 19.0) // 結合new使用隱式呼叫 - 接受一個引數的建構式允許使用賦值語法將物件初始化為一個值:
Classname object = value; // 初始化
這項特性可能導致問題,但可以關閉(以后補上方法)
- 建構式被用來創建物件,而不能通過物件來呼叫(在建構式構造出物件前,物件不存在)
默認建構式:
——在未提供顯示初始值時,用來創建物件的建構式:
Stock fluffy_the_cat; // use the default constructor
- 沒有提供建構式,C++將自動提供默認建構式,它不做任何作業
Stock::Stock() {}類似于未初始化的int x;
- 僅當沒有定義任何建構式時,編譯器才提供默認建構式,為類定義了建構式后,程式員就必須為它提供默認建構式才能使用默認建構式,
- 定義默認建構式的方式:
- 方式一:給所有引數提供默認值(千萬注意在提供默認值時,只能在類宣告中提供,若在類定義提供會出錯,因為編譯器在類宣告中查找符合要求的函式宣告,但禁止在單獨的函式定義時宣告默認值)
Stock(cost string & co = "Error", int n = 0, double pr = 0.0); // 定義建構式時添加引數默認值
- 方式二:函式多載一個無參建構式
Stock();
- 隱式地呼叫默認建構式時,不要使用圓括號
Stock first; // calls default constructor Stock second(); // declare a function
如第二個:變成了回傳Stock物件的函式的宣告
- 在設計類時,通常應提供對所有類成員做隱式初始化的默認建構式
- 方式一:給所有引數提供默認值(千萬注意在提供默認值時,只能在類宣告中提供,若在類定義提供會出錯,因為編譯器在類宣告中查找符合要求的函式宣告,但禁止在單獨的函式定義時宣告默認值)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17311.html
標籤:C++
上一篇:C++ 類
下一篇:C++ 解構式
