2017-04-07 48 views
-6
class a { 
    a(int b); 
} 
main(){ 
    int b=5; 
    a tempa=b; 
} 

這是如何工作的?爲什麼參數可以通過賦值運算符在對象初始化時傳遞給構造函數?

我在HW中遇到過這個問題?

有人可以幫忙嗎?謝謝。

+1

請發佈一些你編譯和運行的實際代碼。 – molbdnilo

+0

Woah ...(){}的字體; ?'與代碼的其餘部分不匹配。你怎麼把它拉開? (不是你應該,它看起來很奇怪) – Borgleader

+1

@Borgleader這些是全角字符。無論如何,對於等寬字體不太有用:) – Quentin

回答

3

構造函數與您的問題中顯示的構造函數一樣可以稱爲轉換構造函數。

它允許編譯器獲取參數類型的值並將其轉換爲類的實例。

在你的榜樣,行

a = b; 

等於

a = a(5); 

(那麼,與既有的一類,並命名爲a變量的衝突除外)

如果你想禁止它,你必須使構造函數顯式

class A 
{ 
public: 
    explicit A(int); 
}; 

然後編譯器不能像上面描述的那樣使用轉換的構造函數。你必須明確使用構造函數

+0

非常感謝,一些程序員老兄。 – ricecakebear

相關問題