2013-06-13 69 views
1

我是C++的初學者,我嘗試通過創建一個對象並通過點運算符訪問它來訪問構造方法。在這個過程中,我得到了錯誤,這很正常嗎?我只是想試驗。如果有辦法做同樣的事情,請讓我知道程序,我已經Google搜索,但找不到任何解決方案。下面是代碼。使用點運算符的訪問構造函數

#include <iostream> 

using namespace std; 

class box 
{ 
    public: 
    box(double); 
    private: 
    double width; 
}; 

box::box(double w) 
{ 
    cout<<"\n I'm inside the constructor "; 
    width=w; 
} 


box::~box() 
{ 
    cout<<"\n I'm inside the desstructor "; 

} 


int main() 
{ 
    box box1; 
    box1.box(10); 
} 
+0

我想experiemnt。爲什麼向下票呢? –

+2

另請注意:a)你的類沒有默認的構造函數,它在'box box1;'line; b)你的析構函數是隱式聲明的,但你試圖在全局範圍內重新定義它。 – soon

+0

@soon我知道,我只是想看看我們是否可以調用構造函數並初始化類的成員變量。 –

回答

5

是的,這是正常的,你不能手動調用構造函數。這不是一個功能。在已經構建的對象上調用c-tor是沒有意義的。

由於構造函數沒有名稱,因此它們在名稱查找過程中始終找不到,它們是 ;然而使用函數表示法(5.2.3) 的顯式類型轉換將導致調用構造函數來初始化對象。 [注意:對於類型爲 的對象的初始化,請參見12.6。 - 尾註]

2

構建一個對象然後再次調用它的構造函數並沒有什麼意義。

box box1; 

創建一個實例,並調用其默認構造函數。

創建完畢後,無法再創建同一實例。你可能要找的是一個賦值操作符,而不是一個construtor。

+0

謝謝,這是有道理的,我只是想玩弄代碼。 –

3

首先請注意,您的代碼甚至無法編譯。我們會在一分鐘內達成。

這條線:

box box1; 

試圖創建一個框對象。之後 ; box1是一個完全成熟的盒子對象。那麼,這將是如果代碼可以編譯。但它不能,因爲盒子沒有默認的構造函數。你不能創建一個沒有參數的box實例 - 你必須給它一個double。在下一行中,你嘗試做到這一點,但已經太晚了 - 構造函數只能在創建對象時調用。

所以你必須,而不是這樣做:

box box1(10.0); 
相關問題