1.C++中類與結構的惟一區別是:類(class)定義中默認狀況下的成員是private的,而結構(struct)定義中默認狀況下的成員是public的。html
2. ::叫做用域區分符,指明一個函數屬於哪一個類或一個數據屬於哪一個類。::能夠不跟類名,表示全局數據或全局函數(即非成員函數)。程序員
3.類名加載成員函數名以前而不是加在函數的返回類型前。面試
錯誤:Tdate::void Set(int m , int d , int y) {}數組
正確: void Tdate::Set(int m , int d , int y) {}函數
4.一個類對象所佔據的內存空間由它的數據成員所佔據的空間總和所決定。類的成員函數不佔據對象的內存空間。測試
5.類的成員函數能夠訪問該類的private成員。優化
6.類做用域是指類定義和相應的成員函數定義範圍。在該範圍內,一個類的成員函數對同一類的數據成員具備無限制的訪問權。this
7.#include <filename.h> 和#include 「filename.h」 有什麼區別?spa
答:.net
8.
MAX(a++ , b)的值爲2,同時a的值爲3;
MAX(a++ , b + 10)的值爲10,同時a的值爲2
9.類定義是不分配空間和初始化的。類是一個抽象的概念,並非一個實體,並不含有屬性值,而只有對象才佔有必定的空間,含有明確的屬性值。
10.運行以下代碼:
class A { public: A(int j):age(j) , num(age + 1) //... protected: int num; int age; }; void mian() { A sa(15); }
代碼運行結果:num=「隨機值 」, age= 15
因爲按成員在類定義中的聲明順序進行構造,而不是按構造函數說明中冒號後面的順序,因此num成員被賦的是一個隨機值,並非想賦的16,由於這個時候,成員age尚未被賦值,age的內存空間中是一個隨機值。
11.若是 const 出如今 * 左邊,則指針指向的內容爲常量;若是 const 出如今 * 右邊,則指針自身爲常量;若是 const 出如今 * 兩邊,則二者都爲常量。
我只要一聽到被面試者說:"const意味着常數",我就知道我正在和一個業餘者打交道。去年Dan Saks已經在他的文章裏徹底歸納了const的全部用法,所以ESP(譯者:Embedded Systems Programming)的每一位讀者應該很是熟悉const能作什麼和不能作什麼.若是你從沒有讀到那篇文章,只要能說出const意味着"只讀"就能夠了。儘管這個答案不是徹底的答案,但我接受它做爲一個正確的答案。(若是你想知道更詳細的答案,仔細讀一下Saks的文章吧。)若是應試者能正確回答這個問題,我將問他一個附加的問題:下面的聲明都是什麼意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前兩個的做用是同樣,a是一個常整型數。第三個意味着a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針能夠)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是能夠修改的,但指針是不可修改的)。最後一個意味着a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。若是應試者能正確回答這些問題,那麼他就給我留下了一個好印象。順帶提一句,也許你可能會問,即便不用關鍵字const,也仍是能很容易寫出功能正確的程序,那麼我爲何還要如此看重關鍵字const呢?我也以下的幾下理由:
1). 關鍵字const的做用是爲給讀你代碼的人傳達很是有用的信息,實際上,聲明一個參數爲常量是爲了告訴了用戶這個參數的應用目的。若是你曾花不少時間清理其它人留下的垃圾,你就會很快學會感謝這點多餘的信息。(固然,懂得用const的程序員不多會留下的垃圾讓別人來清理的。)
2). 經過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。
3). 合理地使用關鍵字const可使編譯器很天然地保護那些不但願被改變的參數,防止其被無心的代碼修改。簡而言之,這樣能夠減小bug的出現。
const的用法參考:http://blog.csdn.net/hyg0811/article/details/9349869
12.C++一維數組和指針的關係總結
對於數組int a[10]; a表示數組的第一個元素的地址,即&a[0];
若是使指針p,指向數組的首元素,能夠進行操做:int * p=a; 或者int *p=&a[0];
那麼p++,是指向數組中的先一個元素,即a[1];
此時*p則是a[1]中所放的值。
此時,a[i]=p[i]=*(a+i)=*(p+i)
關於*p++,因爲++和*的優先級相同,結合方向是自右而左,所以它等價於*(p++)。做用是:先獲得p指向的變量的值(即*p),而後再使指向p的值加1.
*p++等價於*(p++);而*(++p)表示先使p+1,再取*p。
13.在VC中,sizeof有着許多的用法,並且很容易引發一些錯誤。下面根據sizeof後面的參數對sizeof的用法作個總結。
A.參數爲數據類型或者爲通常變量:
例如sizeof(int),sizeof(long)等等。
這種狀況要注意的是不一樣系統系統或者不一樣編譯器獲得的結果多是不一樣的。
例如int類型在16位系統中佔2個字節,在32位系統中佔4個字節。
B.參數爲數組或指針:
int a[50]; //sizeof(a)=4*50=200;求數組所佔的空間大小
int *a=new int[50];// sizeof(a)=4; a爲一個指針,sizeof(a)是求指針的大小,在32位系統中,固然是佔4個字節。
C.參數爲結構或類:
Sizeof應用在類和結構的處理狀況是相同的,須要考慮字節對齊(參加另外一篇文章:http://www.cnblogs.com/heyonggang/archive/2012/12/11/2812304.html)。另外有幾點須要注意:
第1、結構或者類中的靜態成員不對結構或者類的大小產生影響,由於靜態變量的存儲位置與結構或者類的實例地址無關。
第2、沒有成員變量的結構或類(非虛)的大小爲1,由於必須保證結構或類的每個實例在內存中都有惟一的地址。
第3、包含虛函數的類或者虛繼承的類,須要算上虛表指針的佔的4個字節。
下面舉例說明:
Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s爲一個指針。
Class test1{ };//sizeof(test1)=1;
Class test2{ virtual void print(){}};//sizeof(test2)=4;
14.運算符new分配堆內存,若是成功,則返回指向該內存的空間,若是失敗,則返回NULL。因此每次使用運算符new動態分配內存時,都應測試new的返回指針值,以防分配失敗。
1 Person::Person(Person &p) 2 { 3 cout<<"Copying "<<p.pName<<"into this own book\n"; 4 pName = new char[strlen(p.pName) + 1]; 5 if(pName != 0) 6 strcpy(pName , p.pName); 7 }
15.若是你的類須要析構函數來析構資源,則它也須要一個拷貝構造函數。
因爲C++提供的默認拷貝構造函數只是對對象進行淺拷貝複製。若是對象的數據成員包括指向堆空間的指針,就不能使用這種拷貝方式,此時必須自定義拷貝構造函數,爲建立的對象分配堆空間。
16.類成員函數的重載、覆蓋和隱藏區別?
答案:
a.成員函數被重載的特徵:
(1)相同的範圍(在同一個類中);(2)函數名字相同;(3)參數不一樣;(4)virtual 關鍵字無關緊要。
b.覆蓋是指派生類函數覆蓋基類函數,特徵是:
(1)不一樣的範圍(分別位於派生類與基類);(2)函數名字相同;(3)參數相同;(4)基類函數必須有virtual 關鍵字。
c.「隱藏」是指派生類的函數屏蔽了與其同名的基類函數,規則以下:
(1)若是派生類的函數與基類的函數同名,可是參數不一樣。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)若是派生類的函數與基類的函數同名,而且參數也相同,可是基類函數沒有virtual 關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)
17.《C++程序設計教程》P352
在例子中並無聲明派生類GraduateStudent的構造函數,根據類的實現機制,派生類對象建立時,將執行其默認的構造函數。該默認構造函數會先調用基類的默認構造函數,而基類沒有默認構造函數,但正好匹配默認參數的構造函數。
18.在運行時,能根據其類型確認調用哪一個函數的能力,稱爲多態性,或稱遲後聯編,或滯後聯編。編譯時就能肯定哪一個重載函數被調用的,稱爲先期聯編。
多態性可能夠簡單的歸納爲「一個藉口,多種方法」,在程序運行的過程當中才決定調用的函數。
虛函數就是容許被其子類從新定義的成員函數。而子類從新定義父類虛函數的作法,稱爲「覆蓋」或「重寫」。
覆蓋是指子類從新定義父類的虛函數的作法。
重載是指容許存在多個同名函數,而這些函數的參數表不一樣。
爲了指明某個成員函數具備多態性,用關鍵字virtual來標誌其爲虛函數。
若是虛函數在基類與子類中出現的僅僅是名字的相同,而參數類型不一樣,或返回類型不一樣,即便寫上了virtual關鍵字,則也不進行遲後聯編。
19.一個類中將全部的成員函數都儘量地設置爲虛函數老是有益的。它除了會增長一些資源開銷,沒有其它壞處。
設置虛函數,需注意下列事項: