1. 編譯步驟:
step1 首先編譯類的成員
step2 再是類的成員函數
2. 類的前向聲明forward declaration
在建立一個類的對象之前該類必須被定義過(編譯器才知道這個對象需要多少存儲空間)
3. 友元關系不存在傳遞性
就算在類的内部定義友元函數,在類外還得再聲明一次
struct X {
friend void f() {}
}
voidd X::g()(return f()//error
void f();//先聲明
voidd X::g2()(return f()//再才是可以的
4. 編譯器處理完所有類的全部聲明後再處理成員函數的定義
5.如果成員使用了外層作用域的某個名字,而該名字代表一種類型,則類不能在之後重新定義該名字。
typedef double Money;
class Account{
Money f();
typedef double Money;//error
}
6. 類作用域後,在外圍的作用域中查找
void S::f(){
int i = ::w;//::w指全局的那個
}
7. 類内部也可以隐藏外層的
int h;
class s{
int h;//隐藏外層的
}