**下面c++程式的輸出:
#include usingnamespace
std;
class
complex
//a method to compare two complex numbers
bool
operator ==(complex rhs)
}; int
main()
輸出:編譯通過,產生輸出。
same
在c++中,如果乙個類有乙個可以用單個引數呼叫的建構函式,那麼這個建構函式就變成了轉換建構函式,因為這樣的建構函式允許將單個引數轉換成正在構造的類。 我們可以避免這種隱式轉換,因為這可能會導致意想不到的結果。我們可以借助explicit使建構函式顯式化。例如,如果我們嘗試下面的程式,在建構函式中使用顯式關鍵字,我們會得到編譯錯誤。
#include usingnamespace
std;
class
complex
//a method to compare two complex numbers
bool
operator==(complex rhs)
}; int
main()
輸出:編譯錯誤。
no match for 'operator==' in 'com1 == 3.0e+0'
我們仍然可以將double型別轉換為complex型別,但是現在我們必須要明確對它進行型別轉換。例如,下面這個程式就工作正常。
#include usingnamespace
std;
class
complex
//a method to compare two complex numbers
bool
operator==(complex rhs)
}; int
main()
輸出:編譯通過,產生輸出。
same
C 關鍵字explicit的用法
explicit是顯示的意思。而且只能修飾建構函式。因為在類的建構函式中,凡是只帶乙個引數的建構函式,都定義了一組隱式轉化 把建構函式型別轉換為該類的型別。比如 class explicit virtual explicit 則 呼叫 explicit e 1 列印 explicit 建構函式 1 ...
C 關鍵字explicit的用法
c 關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生,宣告為explicit的建構函式不能在隱式轉換中使用。c 中,帶有乙個形參的建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是類的帶參建構函式 2 是預設且隱含的型別轉換操作符。...
explicit 關鍵字的用法
explicit 關鍵字的用法 只有乙個引數的建構函式在預設情況下隱含乙個轉換操作符,對沒有引數或引數個數大於 1 個的建構函式沒有此問題 看後面的特別說明 class x int m a int m b double m c x x int a 如果做如下呼叫 x x 10 10 被隱式轉化成了 ...