C 中關於運算子過載的問題,C 中關於運算子過載的乙個問題

2022-06-02 11:55:09 字數 1352 閱讀 6428

1樓:匿名使用者

如果沒有自己定義預設建構函式,而你使用了ccomplex s;顯然編譯器是會報錯的。

在c++中如果程式設計師沒有編寫任何形式的建構函式,那麼編譯器就會自動合成乙個預設

的建構函式,原型可能是這個樣子:

classname()

該建構函式用來構造預設物件。

而一旦程式設計師自己定義了任何形式的其他建構函式,

那麼該預設建構函式就會遮蔽,如果程式設計師需要預設

建構函式的功能,那麼將自己手動編寫。

具體到你的問題:

//定義的臨時物件,一定要呼叫無參建構函式初始化嗎?

//把無參建構函式去掉就出現編譯錯誤,我定義乙個物件,編譯系統只分配

//儲存空間 ,我不往記憶體單元寫入資料應該沒問題呀.為什麼不能夠預設無參建構函式

//定義的臨時物件,一定要呼叫無參建構函式初始化嗎?

對的,編譯器一定會呼叫預設建構函式。其實你在這裡說的

「無參建構函式」是不準確的術語,應該是呼叫預設建構函式。

//把無參建構函式去掉就出現編譯錯誤,我定義乙個物件,編譯系統只分配

//儲存空間 ,我不往記憶體單元寫入資料應該沒問題呀.為什麼不能夠預設無參建構函式

你定義的這個臨時物件,是儲存在棧中的。你的問題其一:

你怎麼就沒有去寫這個物件所在的記憶體區域呢?

s.real=real+x.real;

s.imag=imag+x.imag;

這不是明顯的寫操作嗎?

其二:編譯器為什麼匯報錯呢?

你可以從函式過載的角度去理解,因為建構函式也是可以過載的。

你沒有了

ccomplex();

ccomplex::ccomplex()

編譯器就會找不到函式宣告,當然會報錯。為什麼找不到函式宣告

我已經在一開始就解釋過了。

2樓:匿名使用者

就是乙個++和--運算子過載的問題。

c++中,區分前置自增和後置自增就是根據過載函式的引數列表。

class &operator++(); //前置,即++aclass &operator++(int); //後置,即a++在你的**中,num x =a++; 一句a++就會呼叫第8行,x = ++a; 就會呼叫第7行。

ps:#include

using namespace std ;

class num

;int main ( )

你的意思是這樣的編譯能通過?

ps:嗯,能編譯成功這樣**的編譯器八成是微軟編譯器。。。因為你太信任微軟編譯器了。。。

微軟牛逼,自己定標準。。。估計除了微軟的編譯器以為沒有任何乙個編譯器能通過這樣的**。。。

C 運算子過載中過載為類的成員函式和過載為類的友元函式

友元函式 bai 具有與du類成員函式相同訪問zhi權利的 非dao成員函式 他可以訪問類專的私有和保護成員屬 通過該類物件 物件指標或其引用。簡單且一般的說 運算子過載為類的成員函式,他的引數個數會比 該運算子的操作符 少一,而運算子過載為友元函式時,他的引數與其操作個數是相同的。友員函式是指來在...

C中關於流插入運算子和流提取運算子的問題

iostream基本上什麼都沒有,只是幾個extern 並沒有過載運算子。ostream和istream也不是它的父類。運算子的過載就是在istream和ostream中。你可以自己看看源 格式化bai輸出 operator inserts formatted data std basic ostr...

c中邏輯運算子是或的意思,C 中運算子 和 用法

是 或者 的意思 是 並且 的意思 例如真 假 結果是真 假 假 結果是假 就是說只要其中一邊是真.條件就成立 真 假 結果是假 真 真 結果是真 就是說只要其中一邊不成立.條件就是假 有乙個是假的.那麼結果就是假的.所以兩邊都是假那麼結果肯定也是假的.假假為真?這不是異或,樓主不要天真了。那只能說...