標籤(空格分隔): 未分類
看網上文章的同時,把裡面提到的一些基礎問題重新按照自己的話來寫一遍,加深印象。
c++中,記憶體分為5個區,分別為:堆、棧、自由儲存區、全域性/靜態儲存區、常量儲存區。
在32位編譯器下:
short int 2位元組
int 4位元組
unsigned int 4位元組
char 1位元組
char * 4位元組(即指標變數): 4個位元組(32位的定址空間是2^32,即32個bit,也就是4個位元組。同理64位編譯器)
float 4位元組
double 8位元組
long 4位元組
long long 8位元組
int i =0, j;
j = ++i; //前自增 j = 1, i = 1
j = i++; //後自增 j = 1, i = 2
預處理
是指在進行編譯的第一遍掃瞄之前做的工作,預處理有預處理程式負責完成
巨集定義
是c語言開始提供的3種預處理功能之一,這3種預處理分別是:巨集定義、檔案包含、條件編譯
巨集定義與操作符的區別:巨集定義是替換,不計算,也不做表示式求解,另外巨集定義替換在編譯前進行,不占用記憶體,巨集的展開不占用執行時間,只佔編譯時間,而操作符占用執行時間。
#define conn(x,y) x##y
#define tochar(x) #@x
#define tostring(x) #x
x##y 表示x連線y
int n = conn(123,456); /* 結果就是n=123456;*/
char* str = conn("asdf", "adf"); /*結果就是 str = "asdfadf";*/
#@x表示給x加上單引號,返回乙個const char。
char a = tochar(1);//結果就是a='1';
做個越界試驗char a = tochar(123);結果就錯了;
但是如果你的引數超過四個字元,編譯器就給給你報錯了!
error c2015: too many characters in constant :p
#x表示給x加雙引號
char* str = tostring(123132);//就成了str="123132";
參考文章 c++巨集定義詳解
虛函式的主要作用是建立抽象模型,從而達到方便擴充套件系統的目的,純虛函式是指被表明為不具體實現的虛函式,是一種特殊的虛函式
很多情況下,基類中不對虛函式給出有意義的實現,而是把它宣告為純虛函式,它的實現留給該基類的派生類來做,這就是純虛函式的作用
int*(*fn)(int*)=0;
上述**什麼意思?
代表是返回型別是int*的,輸入引數是int*的純虛函式指標。
int*: 返回值型別
(*fn): 指標函式
(int*): 引數型別
=0: 純虛函式
const double *cptr;//cptr指標可能指向乙個型別為double的常量值
例子:int (*f)(int x);
由於()運算子的優先順序高於*,所以指標變數名外的括號必不可少。
int func(int x);//宣告乙個函式
int (*f) (int x);//宣告乙個函式指標
f = func;//將func()函式的首位址複製給指標f
注意賦值的時候func不帶括號,也不帶引數,由於func代表函式的首位址,因此複製以後,指標f就指向函式func(x)的**的首位址。
抽象類可以提供多個派生類共享基類的公共定義,他可以提供抽象方法,也可以提供非抽象方法。抽象類不鞥呢被例項化,必須通過繼承由派生類實現其抽象方法,也就是說,對抽象類不能使用new 關鍵字,也不能被封裝。 如果抽象類的派生類沒有實現所有的抽象方法,則該派生類也必須宣告為抽象類。派生類使用覆蓋來實現抽象方法。
抽象類一定包含有純虛函式,因此不能定義抽象類物件。
另外,純虛析構函式在宣告之後一定要定義
,派生類的析構函式會自動呼叫其基類的析構函式。這個過程是遞迴的,最終,抽象類的純虛析構函式也會被呼叫。
如果純虛析構函式只被宣告而沒有定義,那麼就會造成執行時(runtime)崩潰。(在很多情況下,這個錯誤會出現在編譯期,但誰也不擔保一定會是這樣。)純虛析構函式的啞元實現(dummy implementation,即空實現)能夠保證這樣的**的安全性。
參考: c++虛析構函式、純虛析構函式
其實還有些基礎的東西需要了解,那就是虛函式表
。
虛函式表(virtual function)是通過一張虛函式表來實現的。簡稱為v-table。在這個表中,主要是乙個類的虛函式的位址表,這張表解決了繼承、覆蓋的問題,保證其真實反應實際的函式。
更多請參考:c++ 虛函式表解析
C 面試 筆試題目
1 c 中 struct和class的區別是什麼 struct的成員的預設屬性是公開的,class的成員的預設屬性是私有的 2 c 程式中呼叫被c編譯器編譯後的函式,為什麼包含extern c extern是c c 中的關鍵字其宣告的函式和變數可以在本模組或者其他模組中使用 其次c 作為一種物件導向...
面試筆試題目總結
總結一下以前面試和筆試時的題目,找工作要用的,說不定哪天就又遇上了。1.鍊錶與陣列的區別 這個題目遇到了兩次 答 1 陣列要事前定義固定的長度,不能動態的刪減 2 鍊錶能動態的進行儲存分配,可以適應資料動態的增減情況,可以方便的插入刪除資料項 3 陣列從棧中分配空間,自由度小 4 鍊錶從堆中分配空間...
C 面試筆試題
看一下這是一些c 面試的筆試,對於學習c 的你也許也是個考驗吧,有時間做做吧 給定九個數,例如 1,3,3,5,6,7,8,8,9計算出這九個數的排列的種數。需要考慮重複情況,如果給定9個1,則只有一種結果。限制 不能使用stl庫 要求 完成函式 unsigned int foo unsigned ...