[爆卦]::class是什麼?優點缺點精華區懶人包

為什麼這篇::class鄉民發文收入到精華區:因為在::class這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cory8249 (Cory)看板C_and_CPP標題[問題] 關於 class 的賦值、建構...


開發平台(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

你可能也想看看

搜尋相關網站