python面向對象
python內沒有new關鍵字
python類方法的定義時第一個參數一定是self
@classmethod是類方法,傳入的參數一定有cls
@property是對象屬性的另一種定義方式,調用時不需要加上()。並且只有一個參數self
C++的構造函數和析構函數調用順序
C++中構造函數的順序是
1)如果某個類具體基類,執行基類的默認構造函數。
(2)類的非靜態數據成員,按照聲明的順序創建。
(3)執行該類的構造函數。
即構造類時,會先構造其父類,然後創建類成員,最後調用本身的構造函數。
C++中析構函數的順序是正好和構造函數反過來。
C++ union類型
http://www.cnblogs.com/xdotnet/archive/2011/04/20/cpp_union.html
union主要是共享內存,分配內存以其最大的結構或對象爲大小,即sizeof最大的。
32位系統和64位系統區別
指針不論是什麼類型在32位系統都佔4字節,64位系統佔8字節。
stack和heap區別
C++多態
C++ 多態意味着調用成員函數時,會根據調用函數的對象的類型來執行不同的函數。
struct A{
void foo(){printf("foo");}
virtual void bar(){printf("bar");}
A(){bar();}
};
struct B:A{
void foo(){printf("b_foo");}
void bar(){printf("b_bar");}
};
那麼
A *p=new B;
p->foo();
p->bar();
輸出爲:
bar // 因爲A爲基類,所以要先調用基類的構造函數
foo // 由於foo沒有聲明爲虛函數,所以調用的是基類的方法
b_bar // bar聲明爲虛函數,調用派生類方法
int * const / int const *的不同
首先注意,const int *p 和int const *p 是一樣的。
int const * p = &a;
// pointer to const int
// 表示不能通過指針p修改a的值
int * const p = &a;
// const pointer to int
// 表示指針p不可以再指向別處了
int main()
{
int i=10;
int j=1;
const int *p1;//(1)
int const *p2=&i; //(2)
p2=&j;//(3)正確的語句,p2可以改變指向
int *const p3=&i;//(4)
*p3=20;//(5)正確的語句,可以通過p3修改i的值
*p2=30;//(6)錯誤的語句,不可以修改p2的值
p3=&j;//(7)錯誤的語句,不可以修改p3的指向
return 0;
}
多進程和多線程
虛函數和純虛函數
虛函數就是使用virtual
定義的函數,基類可以在裏面實現。
純虛函數則是使用virtual void function a() = 0
聲明,也可看作接口。每個派生類都要有實現純虛函數的具體方法。
sizeof(struct)
http://www.cnblogs.com/lazycoding/archive/2011/03/22/sizeof-struct.html
使用對齊的方式分配內存空間。
struct A{
long a1; // 佔8個字節
short a2; // 佔2個字節,但是8是其倍數,所以直接2+8 = 10
int a3; // 佔4個字節,但是10不是其倍數,加到12後有12+4 = 16
int *a4;// 佔8個字節,16是其倍數,直接16+8 = 24
};
C++內存釋放
new -> delete
malloc -> free