1. 程式人生 > >c++ 類與對象(1)

c++ 類與對象(1)

意義 c++ 類 操作 兩種方法 protected ble cos const ++

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)