日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C++筆試面試準(zhǔn)備(整理)

 行者花雕 2021-04-24

1、C++中指針與引用的區(qū)別

1)指針是一個(gè)新的變量,存儲(chǔ)了另一個(gè)變量的地址,我們可以通過訪問這個(gè)地址來修改另一個(gè)變量;

引用只是一個(gè)別名,還是變量本身,對(duì)引用的任何操作就是對(duì)變量本身進(jìn)行操作,以達(dá)到修改變量的目的

2)引用只有一級(jí),而指針可以有多級(jí)

3)指針傳參的時(shí)候,還是值傳遞,指針本身的值不可以修改,需要通過解引用才能對(duì)指向的對(duì)象進(jìn)行操作。

引用傳參的時(shí)候,傳進(jìn)來的就是變量本身,因此變量可以被修改。

2、結(jié)構(gòu)體(struct):

將不同類型的數(shù)據(jù)組合成一個(gè)整體,sizeof(struct)是內(nèi)存對(duì)齊后所有成員長(zhǎng)度的總和。

3、內(nèi)存對(duì)齊:(轉(zhuǎn)自:http://www./article/2021/01/2100/0011500966600.html)

 intshortlongcharcahr*floatdouble
32位4241448
64位4281848

例1:(假設(shè)指定對(duì)齊字節(jié)為8,那么n = min(8,4) = 4)

class node{    int i; //放在位置0,位置區(qū)間[0~3]    char c; //1 < n, 那么放置起始位置應(yīng)該是1的倍數(shù),即4,位置區(qū)間為[4]    short s; //2 < n,那么放置起始位置應(yīng)該是2的倍數(shù),即6,位置區(qū)間為[6~7]}

成員共占據(jù)[0~7]8個(gè)字節(jié),剛好是4的倍數(shù),因此大小是8

例2(假設(shè)指定對(duì)齊字節(jié)是2,則n = min(2,4) = 2) 

class node{    char c; //放在位置0,位置區(qū)間[0]    int i; //4 > n, 那么放置起始位置應(yīng)該是2的倍數(shù),即2,位置區(qū)間為[2~5]    short s; //2 = n,那么放置起始位置應(yīng)該是2的倍數(shù),即6,位置區(qū)間為[6~7]}

此時(shí)成員共占用[0~7]8個(gè)字節(jié),剛好是4的倍數(shù),因此大小是8

4、#define和const的區(qū)別

1)#define定義的常量沒有類型,所給出的是一個(gè)立即數(shù);const定義的常量有類型名字,存放在靜態(tài)區(qū)域

2)處理階段不同,#define定義的宏變量在預(yù)處理時(shí)進(jìn)行替換,可能有多個(gè)拷貝,const所定義的變量在編譯時(shí)確定其值,只有一個(gè)拷貝。

3)#define定義的常量是不可以用指針去指向,const定義的常量可以用指針去指向該常量的地址

4)#define可以定義簡(jiǎn)單的函數(shù),const不可以定義函數(shù)

5、重載:同一類中,函數(shù)名相同,參數(shù)和返回值不同(相同范圍(同一個(gè)類中)、函數(shù)名字相同、參數(shù)不同、virtual關(guān)鍵字可有可無)

覆蓋:派生類覆蓋基類的虛函數(shù),實(shí)現(xiàn)接口的重用(不同范圍(基類和派生類)、函數(shù)名字相同、參數(shù)相同、基類中必須有virtual關(guān)鍵字(必須是虛函數(shù)))

重寫:派生類屏蔽了其同名的基類函數(shù)(不同范圍(基類和派生類)、函數(shù)名字相同、參數(shù)不同或者參數(shù)相同且無virtual關(guān)鍵字)

6、new、delete、malloc、free之間的關(guān)系

new/delete,malloc/free都是動(dòng)態(tài)分配內(nèi)存的方式

1)malloc對(duì)開辟的空間大小嚴(yán)格指定,而new只需要對(duì)象名

2)new為對(duì)象分配空間時(shí),調(diào)用對(duì)象的構(gòu)造函數(shù),delete調(diào)用對(duì)象的析構(gòu)函數(shù)

既然有了malloc/free,C++中為什么還需要new/delete呢?

因?yàn)閙alloc/free是庫函數(shù)而不是運(yùn)算符,不能把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的功能強(qiáng)加于malloc/free.

7.STL庫:(轉(zhuǎn)載:https://blog.csdn.net/qq_41431457/article/details/88898925)

STL(Standard Template Library),即標(biāo)準(zhǔn)模板庫,是一個(gè)具有工業(yè)強(qiáng)度的,高效的C++程序庫。

vector:是支持隨機(jī)訪問的迭代器

 

 

 

 

 

 

 

 

 vector的動(dòng)態(tài)增加大小的時(shí)候,并不是在原有的空間上持續(xù)新的空間(無法保證原空間的后面還有可供配置的空間),而是以原大小的兩倍另外配置一塊較大的空間,然后將原內(nèi)容拷貝過來,并釋放原空間。在VS下是1.5倍擴(kuò)容,在GCC下是2倍擴(kuò)容。

#include<iostream>#include<vector>using namespace std;//iterator模式:提供一種方法,使之能依次訪問容器內(nèi)的各個(gè)元素,而又不暴露該聚合物內(nèi)部的表述方式。 void print(vector<int>&v){for(vector<int>::iterator i=v.begin();i!=v.end();i++){
        cout<<*i<<" ";
    }
    cout<<endl;
}//四種定義方法 void test01()
{
    vector<int>v1;for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    print(v1);
    
    vector<int>v2(v1.begin(),v1.end());
    print(v2);
    
    vector<int>v3(10,100);
    print(v3);
    
    vector<int>v4(v3);
    print(v4);    //賦值 opertor= vector<int>v5;
    v5=v1;
    print(v5);    //assign賦值vector <int>v6;
    v6.assign(v1.begin(),v1.end());
    print(v6);
    
    vector <int>v7;
    v7.assign(10,1);//10個(gè)1    print(v7); 
    //插入,第一個(gè)參數(shù)是迭代器v7.insert(v7.begin(),1000) ;
    print(v7);
    
    v7.insert(v7.begin(),3,11111000) ;
    print(v7);
    
     
}int main()
{
    test01();    return 0;
}

8、const

const修飾類的成員變量,表示常量不可能被修改

const修飾類的成員函數(shù),表示該函數(shù)不會(huì)修改類中的數(shù)據(jù)成員,不會(huì)調(diào)用其他非const的成員函數(shù)

static:

12、關(guān)鍵字static的作用

1)函數(shù)體內(nèi): static 修飾的局部變量作用范圍為該函數(shù)體,不同于auto變量,其內(nèi)存只被分配一次,因此其值在下次調(diào)用的時(shí)候維持了上次的值

2)模塊內(nèi):static修飾全局變量或全局函數(shù),可以被模塊內(nèi)的所有函數(shù)訪問,但是不能被模塊外的其他函數(shù)訪問,使用范圍限制在聲明它的模塊內(nèi)

3)類中:修飾成員變量,表示該變量屬于整個(gè)類所有,對(duì)類的所有對(duì)象只有一份拷貝

4)類中:修飾成員函數(shù),表示該函數(shù)屬于整個(gè)類所有,不接受this指針,只能訪問類中的static成員變量

9.堆和棧的區(qū)別

堆heap低址-高址內(nèi)存手動(dòng)釋放效率低函數(shù)的參數(shù)值、局部變量
棧stack 高-低自動(dòng)效率高new

10、C++中的內(nèi)存管理

在C++中,內(nèi)存被分成五個(gè)區(qū):棧、堆、代碼區(qū)、全局/靜態(tài)存儲(chǔ)區(qū)、常量區(qū)

代碼區(qū):

棧:存放函數(shù)的參數(shù)和局部變量,編譯器自動(dòng)分配和釋放

堆:new關(guān)鍵字動(dòng)態(tài)分配的內(nèi)存,由程序員手動(dòng)進(jìn)行釋放,否則程序結(jié)束后,由操作系統(tǒng)自動(dòng)進(jìn)行回收

全局/靜態(tài)存儲(chǔ)區(qū):存放全局變量和靜態(tài)變量

常量區(qū):存放常量,不允許被修改

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多