標籤:綁定 ++ ted 操作 情況下 return 錯誤 左值 應該
class Book{private : string book_name; double book_cost; int book_price;public : Book(string name , double cost , int price):book_name(name) , book_cost(cost) , book_price(price) {}; string see_book_name() { return book_name; }};
關於建構函式:
通常我們對類成員進行“初始化”有兩種方式:
1. 建構函式後面跟冒號;
2. 建構函式裡面對成員進行賦值。
兩種方法其實是完全不同的。
class A { public: A(int& c) { _a = 1; _b = 2; _c = c; } protected: int _a; const int _b; int& _c; };
如上面這段代碼:這是建構函式裡對成員進行賦值。但編譯器會報錯,原因在於const對象不能做左值,c是指向int型的引用,也不能直接綁定到一個int型字面值上。
這種錯誤就類似於 :const int a = 1 , int & b = 2;
這種情況下,我們就應該使用建構函式後面跟冒號的形式:
class A { public: A(int& c): _b(2), _c(c) { _a = 1; } protected: int _a; const int _b; int& _c; };
究其原因在於:const和引用必須在聲明的時候就初始化,換句話說就是在給const和參考型別變數分配記憶體的時候就初始化。
現在我們就可以知道了,其實在建構函式裡面調用等號並不是真正意義上的“初始化”。這個過程相當於:
1. 系統建立成員變數;
2. 建立完後再進行賦值操作。
而在建構函式後面跟冒號,就相當於:
1. 系統建立成員變數並且初始化。也就是系統為成員變數分配了一塊記憶體並且把相應的資料給填了進去。而建構函式裡面調用等號的方式是分配好後再進行賦值,多了一個步驟。
c++ 類與對象(1)