‧成員函數的定義:
1. 定義在Class中
2. 定義在外部,但是函數名稱前要加上"類別名稱::"
小易說後面的比較好,不然萬一有互相呼叫的就會打架了
‧呼叫同一個物件的成員函數只需要函數名稱
呼叫不同物件的成員函數則需要"物件名稱."
‧存取標籤(Access Label)
public(其他物件可以存取) v.s. private(其他物件不得存取) // 在class中可以寫很多次
class省略存取標籤時,會自動定義成private,struct省略存取標籤則會定義成public
private和public弄錯時會Compile Error
‧建構子(constructor)
產生物件時自動呼叫的特殊成員函數,必須為public,負責成員變數的初始化,宣告時要跟class同名
class ex
{
public:
ex()
private:
int data;
};
ex::ex()
{
data = 0;
}
‧解構子(destructor)
物件結束任務(執行到物件有效範圍結束)時會自動呼叫的特殊成員函數,必須為public,宣告時要跟class同名並在最前面加上"~"
‧C++函數的參數值可以有初始值,但是要從最後一個參數依序開始預設(可以只有後半段有預設值)
‧多載(overload)就是不同的傳入參數型態可以有同樣名字的函數,編譯器會依照傳入值型態對應到對應的函數
只有回傳值型態不同則無法多載
‧若是全域變數、成員變數、成員函數裡的local變數有相同名稱,則函數內函數的local變數有最優先權
Class名稱::變數名稱 則可以對成員變數進行操控
::變數名稱 可以對全域變數進行操控
‧cout.width(4);
cout<<25;
= printf("%4d", 25);
‧cout.fill('0');
cout.width(4);
cout<<25;
= printf("%0d", 25);
‧cin.getline(char[]名稱, size); = gets(char[]); + 長度限制
‧命名空間(namespace)的寫法是在外面加上
namespace 命名空間名稱
{
(...)
}
存取時加上"命名空間名稱::"
在開頭加上using namespace 命名空間名稱則可以直接存取該命名空間裡的函數&變數
‧函數加上inline,會展開到呼叫函數的部份 (其實和C的Macro很像)
例如:
inline int sum(int a, int b)
{
return a + b;
}
int main()
{
sum(10, 20);
return 0;
}
在編譯後會變成
int main()
{
10+20;
return 0;
}
這樣可以減少呼叫函數的時間,但是程式本身大小會變大
‧在成員函數名稱後、大括號前加上const,代表此成員函數是const成員函數,不會變更Class裡成員函數的值
‧指標 = new 資料型態
delete 指標名稱
‧指標名稱 = new 陣列型態[個數]
delete [] 指標名稱
‧建構子也可以多載(可以傳入初始化參數)(使用直接初始化)
複製建構子:用既有物件初始化,可以自己定義(有指標成員的話則定義比較好)
‧在一個class裡用friend class 類別名稱,就可以讓該類別的成員函數存取這個class裡的變數
(但是是單向的,也就是這個class不可以存取他定義成friend類別裡的變數
也可以只針對其他類別的成員函數加上friend宣告,此時那個類別裡就只有該成員函數可以存取它