2013-11-27 72 views
0

在類argList構造是指令調用包含類的類的構造內的構造

args_[0] = fileName(argv[0]); 

當方法fileName(...)搜索事實證明,它應該是fileName類的構造:

inline Foam::fileName::fileName(const char* str) //Construct as copy of character array. 
: string(str) //Construct as copy of character array. 
{ 
    stripInvalid(); //Strip invalid characters from the given string. 
} 

兩個問題:

  1. 它真的是類fileName的構造函數嗎?
  2. 如果它被稱爲 這樣不成爲靜態的fileName的構造函數?

問候 streight

回答

3
  1. 是 - 這是fileName類的構造函數真 - 沒有返回值和方法的名稱是一樣的類的名稱。

  2. 這不是在構造函數的調用,但在構造函數的定義(我猜::是什麼是混淆你):

    inline Foam::fileName::fileName(const char* str) //Construct as copy of character array. 
    

    這是調用構造函數:

    args_[0] = fileName(argv[0]); 
    

    C++中沒有靜態構造函數。

3

'1。它真的是類fileName的構造函數嗎?

是的。因爲它爲args_ [0]分配了一個fileName類的新實例,所以調用該構造函數。

'2。如果它被這樣調用,那麼它沒有fileName的構造函數是靜態的嗎?

編號構造函數不能是靜態的。這是構建對象的正確方法之一。

2

它真的是類fileName的構造函數嗎?

間接,是的。對於類T,表達式T(args)創建一個臨時對象,並通過爲參數調用合適的構造函數來初始化它。

在這種情況下,此構造函數與參數類型匹配,所以這就是使用的。

如果像這樣調用,那麼fileName的構造函數是不是靜態的?

沒有,構造函數不能被聲明爲靜態的。他們總是可以被用於初始化是命名變量,或臨時工像這樣的,沒有特殊聲明。