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 中運算子 和 用法
是 或者 的意思 是 並且 的意思 例如真 假 結果是真 假 假 結果是假 就是說只要其中一邊是真.條件就成立 真 假 結果是假 真 真 結果是真 就是說只要其中一邊不成立.條件就是假 有乙個是假的.那麼結果就是假的.所以兩邊都是假那麼結果肯定也是假的.假假為真?這不是異或,樓主不要天真了。那只能說...