一個空類默認大小為1,如果有虛函數,因為虛函數表與指針的存在,所以在32位機器上,一個類的大小為4。
class EmptyCppClass{ public: EmptyCppClass(); // 缺省構造函數 EmptyCppClass( const EmptyCppClass& ); // 拷貝構造函數 ~EmptyCppClass(); // 析構函數 EmptyCppClass& Operator=( const EmptyCppClass& ); // 賦值運算符 EmptyCppClass* operator&(); // 取址運算符 const EmptyCppClass* operator&() const; // 取址運算符 const};優點:提升運行效率,缺點:使二進制文件變得很大。
不可以: - 虛函數肯定不會被內聯這一點毋庸置疑,因為虛函數只有到了runtime才能被識別到底是哪一個被調用,而內聯是編譯器就會將代碼展開并安插,這個明顯不是一回事。 - inline有兩種表現方式,一種就是一inline在實現文件中(.cpp)指出,這個被稱為顯示內聯,另外一種將函數聲明和定義放入同一個文件,這種稱為隱式內聯,但是還是如前面所說,inline只是一個提示符,至于會不會內聯還是由編譯器說了算。
虛函數一個Virtual就夠了,但是純虛函數還得=0做標識,另外,純虛函數在子類中必須實現,虛函數沒這個說法。
int i;float f; f=(float)i;
或者f=static_cast<float>(i);
const_cast 用于取出const屬性,把const類型的指針變為非const類型的指針,如:const int *fun(int x,int y){} int *ptr=const_cast<int *>(fun(2.3))
dynamic_cast 該操作符用于運行時檢查該轉換是否類型安全,但只在多態類型時合法,即該類至少具有一個虛擬方法。dynamic_cast與static_cast具有相同的基本語法,dynamic_cast主要用于類層次間的上行轉換和下行轉換,還可以用于類之間的交叉轉換。在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有類型檢查的功能,比static_cast更安全。reinterPRet_cast interpret是解釋的意思,reinterpret即為重新解釋,此標識符的意思即為數據的二進制形式重新解釋,但是不改變其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);
這個轉換方式很少使用。const int *p;
// const修飾的是*p,因此*p是常量不能改變,但可以改變p的指向;int const* p;
// 同上,主要是看const與*的前后關系;int* const p;
// const修飾的是p,因此p的指向是常量不能改變,但*p可以改變;const int const *p;
// 兩個const既修飾了*p也修飾了p,因此*p與p都是常量不能改變;malloc, free是操作符,只能對內置類型進行分配,new,delete是函數,可以對自定義類型進行內存分配,new的調用會調用構造函數,malloc則沒有。
類成員默認為private,struct默認為public;
C++類可以有自身類型的對象,但是不是簡單的直接定義對象,它可以定義靜態的自身類型對象或者是自身類型的指針。
析構函數可以為虛函數,而且應該標為虛函數,這是為了防止析構函數在析構父類的時候沒有析構子類,這樣會造成內存泄漏。而默認的析構函數不是虛函數。
構造函數絕對不能為虛函數,因為構造函數的調用必須要確定構造出的類,這個是在編譯器決定的,虛函數是在運行時決定的,所以不可以。
參考這里:http://zhedahht.blog.163.com/blog/static/25411174200793181548842/
當然可以私有,只不過private以后就不能再進行拷貝了。
這是為了防止循環調用構造函數,造成死循環。
一般來說不需要重寫復制構造函數,除非默認的復制構造函數提供的淺拷貝不能滿足需求了才重寫。
類數據成員的初始化只要記住初始化順序跟定義順序是一致的就可以了。
可以是可以,但是得需要重寫一個類似于析構函數的函數,只有這樣才能正常地釋放對象。
這個已經涉及到了C++03的標準,它規定賦值的左值是const,所以右值也應該是const。
因為靜態周期生命周期要比其他對象要長,所以靜態對象一定是在函數結束的最后被銷毀的。
不可以,虛函數必須有對象操作,靜態的話就跟對象沒關系了,就這一點就矛盾了,所以虛函數不能為static。
新聞熱點
疑難解答
圖片精選