C 自動型別轉換的問題

2021-09-02 01:14:19 字數 864 閱讀 8981

#include#include#define mian main

#define vodi void

class vector

;int main()

vector::vector(double a, double b)

vector::vector()

vector::vector(double a)

/*vector::operator double() const

*/vodi vector::show() const

vector vector::operator-()

vector vector::operator+(vector& add)

bool operator>(const vector& v1, const vector& v2)

vector operator+(const vector& f1, const vector& f2)

用到運算子過載時候,如同程式所示,使用加法

total = vector1 + c;
如果同時存在單個引數的建構函式和過載double,即

vector(double);

operator double() const;

那麼將會造成上述加法語句的二義性,導致編譯錯誤。

編譯器認為上述加法可以:

(1)將vector1物件轉換為double型別與double型別的c相加,再賦值給total物件。

(2)將c通過隱式構造成為vector類物件,再利用友元函式或成員函式(vector operator+(vector&))進行相加。

C 自動型別轉換

在c 中,如果編譯器看到乙個表示式或函式呼叫使用了乙個不合適的型別,它會執行乙個自動型別轉換,將不合適的型別轉換為合適的型別。對於自定義類,可以通過定義該類的建構函式的方法將其它型別轉換為本自定義類 或者使用運算子將本自定義類轉換為其它型別。對於乙個自定義類,可以為該類定義乙個有乙個引數的建構函式。...

c語言的自動型別轉換

2009 12 16 09 53 1292人閱讀 收藏舉報 自動轉換遵循以下規則 1 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。2 轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。a.若兩種型別的位元組數不同,轉換...

c語言的自動型別轉換

自動轉換遵循以下規則 1 若參與運算量的型別不同,則先轉換成同一型別,然後進行運算。2 轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。a.若兩種型別的位元組數不同,轉換成位元組數高的型別。b.若兩種型別的位元組數相同,且一種有符...