看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ / GCC 問題(Question): 幾個關於C++程式運作的機制 Q1: 如果class的某個建構式, 所有引數都有給預設值, 它是否就是預設建構式 ? Q2: 如果函式宣告與實作分開, 引數的預設值只要在宣告式給就好了 ? Q3: class 內宣告 friend 函式, 則整個 class 都變成該函式的作用域嗎 ? Q4: 如果對 class object 以 built-in type 賦值, 會發生什麼事 ? 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> #include <string> using namespace std; class ComplexNum{ public: ComplexNum(double=0, double=0); // Q1 & Q2 void set(double r, double i){ real=r; imag=i;} void print(ostream& out){ out << "the complex = " << *this;} // Q3 private: string noUseString; int noUseInt; double real; double imag; friend ostream& operator<<(ostream&, const ComplexNum&); // Q3 }; ComplexNum::ComplexNum(double r, double i) : real(r), imag(i) {} ostream& operator<<(ostream& out, const ComplexNum& c) { out << c.real << " + " << c.imag << "i"; return out; } int main() { ComplexNum c1; ComplexNum c2=10; // Q4 cout << c1 << endl; cout << c2 << endl; c1.set(3,4); c1.print(cout); return 0; } 補充說明(Supplement): 最近遇到的一些問題 感謝各位幫忙 !! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.221.54
EdisonX:Q1~Q3: yes , Q4 發生語法錯誤,除非改寫建構子或改寫 06/17 15:58
EdisonX:operator = (int) 06/17 15:59
我本來也這樣想 但是很神奇的 GCC 可以跑 而且連個警告都沒有 c2 印出來結果是 10 + 0i 我就很納悶了... ※ 編輯: cory8249 來自: 140.114.221.54 (06/17 18:05)
purincess:Q4那個A a = x; compiler不是會改成用A a(x)嗎? 06/17 18:54
purincess:如果是這樣就是第一個參數有提供 第二個用預設阿@@ 06/17 18:55
purincess:而且沒用explicit 06/17 18:55
EdisonX:我指的「改寫建構子」就是 p 大說的 A a(x) 06/17 20:00
purincess:了解@@" 06/17 20:41