C++ 基礎(chǔ)知識(shí)

main函數(shù)執(zhí)行以前,還會(huì)執(zhí)行什么代碼?

答案:全局對(duì)象的構(gòu)造函數(shù)會(huì)在 main 函數(shù)之前執(zhí)行

static的應(yīng)用和作用

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

(2)在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;

(3)在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);

(4)在類中的static成員變量屬于整個(gè)類所擁有,對(duì)類的所有對(duì)象只有一份拷貝;

(5)在類中的static成員函數(shù)屬于整個(gè)類所擁有,這個(gè)函數(shù)不接收this指針,因而只能訪問類的static成員變量。

const的應(yīng)用和作用

(1)欲阻止一個(gè)變量被改變,可以使用const關(guān)鍵字。在定義該const變量時(shí),通常需要對(duì)它進(jìn)行初始化,因?yàn)橐院缶蜎]有機(jī)會(huì)再去改變它了;

(2)對(duì)指針來說,可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時(shí)指定為const;

(3)在一個(gè)函數(shù)聲明中,const可以修飾形參,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;

(4)對(duì)于類的成員函數(shù),若指定其為const類型,則表明其是一個(gè)常函數(shù),不能修改類的成員變量;

(5)對(duì)于類的成員函數(shù),有時(shí)候必須指定其返回值為const類型,以使得其返回值不為“左值”。

函數(shù)指針和指針函數(shù)的區(qū)別

函數(shù)指針是指向一個(gè)函數(shù)入口的指針;

指針函數(shù)是函數(shù)的返回值是一個(gè)指針類型。

new/delete 和malloc/free 的區(qū)別

new和delete會(huì)自動(dòng)調(diào)用對(duì)象的構(gòu)造與析構(gòu)函數(shù)而malloc與free不會(huì);

malloc與free是C++/C 語言的標(biāo)準(zhǔn)庫(kù)函數(shù),new/delete 是C++的運(yùn)算符


什么是指針 指針的理解

指針是一個(gè)變量,該變量專門存放內(nèi)存地址;

指針變量的類型取決于其指向的數(shù)據(jù)類型,在所指數(shù)據(jù)類型前加*

指針變量的特點(diǎn)是它可以訪問所指向的內(nèi)存。

static函數(shù)與普通函數(shù)的區(qū)別

static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝

struct(結(jié)構(gòu))union(聯(lián)合)的區(qū)別

1. 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成, 但在任何同一時(shí)刻, 聯(lián)合中只存放了一個(gè)被選中的成員(所有成員共用一塊地址空間), 而結(jié)構(gòu)的所有成員都存在(不同成員的存放地址不同)。

2. 對(duì)于聯(lián)合的不同成員賦值, 將會(huì)對(duì)其它成員重寫,? 原來成員的值就不存在了, 而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。

?classstruct的區(qū)別

struct 的成員默認(rèn)是公有的,而類的成員默認(rèn)是私有的。

程序的局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū))中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于(堆)中

UDPTCP的區(qū)別

TCP的全稱為傳輸控制協(xié)議。這種協(xié)議可以提供面向連接的、可靠的、點(diǎn)到點(diǎn)的通信。

UDP全稱為用戶報(bào)文協(xié)議,它可以提供非連接的不可靠的點(diǎn)到多點(diǎn)的通信。

用TCP還是UDP,那要看你的程序注重哪一個(gè)方面?可靠還是快速?

全局變量的優(yōu)缺點(diǎn)

全局變量也稱為外部變量,它是在函數(shù)外部定義的變量,它屬于一個(gè)源程序文件,它保存上一次被修改后的值,便于數(shù)據(jù)共享,但不方便管理,易引起意想不到的錯(cuò)誤。

數(shù)組與指針的區(qū)別

數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。指針可以隨時(shí)指向任意類型的內(nèi)存塊。

(1)修改內(nèi)容上的區(qū)別

char a[] = “hello”;

a[0] = ‘X’;

char *p = “world”; // 注意p 指向常量字符串

p[0] = ‘X’; // 編譯器不能發(fā)現(xiàn)該錯(cuò)誤,運(yùn)行時(shí)錯(cuò)誤

(2) 用運(yùn)算符sizeof 可以計(jì)算出數(shù)組的容量(字節(jié)數(shù))。sizeof(p),p 為指針得到的是一個(gè)指針變量的字節(jié)數(shù),而不是p 所指的內(nèi)存容量。

內(nèi)存的分配方式

分配方式有三種,

1、 靜態(tài)存儲(chǔ)區(qū),是在程序編譯時(shí)就已經(jīng)分配好的,在整個(gè)運(yùn)行期間都存在,如全局變量、常量。

2、 棧上分配,函數(shù)內(nèi)的局部變量就是從這分配的,但分配的內(nèi)存容易有限。

3、 堆上分配,也稱動(dòng)態(tài)分配,如我們用new,malloc分配內(nèi)存,用delete,free來釋放的內(nèi)存。

strcpy()memcpy()的區(qū)別

strcpy()和memcpy()都可以用來拷貝字符串,strcpy()拷貝以’\0’結(jié)束,但memcpy()必須指定拷貝的長(zhǎng)度。

winsock建立連接的主要實(shí)現(xiàn)步驟

服務(wù)器端:socket()建立套接字,綁定(bind)并監(jiān)聽(listen),用accept()等待客戶端連接, accept()發(fā)現(xiàn)有客戶端連接,建立一個(gè)新的套接字,自身重新開始等待連接。該新產(chǎn)生的套接字使用send()和recv()寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接字。

客戶端:socket()建立套接字,連接(connect)服務(wù)器,連接上后使用send()和recv(),在套接字上寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接字。

構(gòu)成Win32 API函數(shù)的三個(gè)動(dòng)態(tài)鏈接庫(kù)是

內(nèi)核庫(kù),用戶界面管理庫(kù),圖形設(shè)備界面庫(kù)。

Visual C++Win32 APIMFC之間的關(guān)系

(1)?? Visual C+是一個(gè)以C++程序設(shè)計(jì)語言為基礎(chǔ)的、集成的、可視化的編程環(huán)境;

(2)?? Win32 API是32位Windows操作系以C/C++形式提供的一組應(yīng)用程序接口;

(3)?? MFC是對(duì)Win32 API的封裝,簡(jiǎn)化了開發(fā)過程。

多態(tài)的兩個(gè)必要條件

1.一個(gè)基類的指針或引用指向一個(gè)派生類對(duì)象??

2.虛函數(shù)

什么時(shí)候需要用虛析構(gòu)函數(shù)

當(dāng)基類指針指向用new運(yùn)算符生成的派生類對(duì)象時(shí),delete基類指針時(shí),派生類部分沒有釋放掉而造成釋放不徹底現(xiàn)象,需要虛析構(gòu)函數(shù)。 補(bǔ)充:虛函數(shù)就是讓派生類調(diào)用基類的虛函數(shù)。

語句for(1)有什么問題 ?它是什么意思

無限循環(huán),和while(1)相同。

TCP/IP建立連接的過程

在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。

第一次握手:建立連接時(shí),客戶端發(fā)送連接請(qǐng)求到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);

第二次握手:服務(wù)器收到客戶端連接請(qǐng)求,向客戶端發(fā)送允許連接應(yīng)答,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);

第三次握手:客戶端收到服務(wù)器的允許連接應(yīng)答,向服務(wù)器發(fā)送確認(rèn),客戶端和服務(wù)器進(jìn)入通信狀態(tài),完成三次握手

memset ,memcpy的區(qū)別

memset用來對(duì)一段內(nèi)存空間全部設(shè)置為某個(gè)字符,一般用在對(duì)定義的字符串進(jìn)行初始化為’\0′。

memcpy用來做內(nèi)存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對(duì)象,可以指定拷貝的數(shù)據(jù)長(zhǎng)度;

類成員函數(shù)的重載、覆蓋和隱藏的區(qū)別

成員函數(shù)被重載的特征:

(1)相同的范圍(在同一個(gè)類中);

(2)函數(shù)名字相同;

(3)參數(shù)不同;

(4)virtual 關(guān)鍵字可有可無。

覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:

(1)不同的范圍(分別位于派生類與基類);

(2)函數(shù)名字相同;

(3)參數(shù)相同;

(4)基類函數(shù)必須有virtual 關(guān)鍵字。

“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:

(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。

(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏(注意別與覆蓋混淆)

面向?qū)ο蟮娜齻€(gè)基本特征

1. 封裝:將客觀事物抽象成類,每個(gè)類對(duì)自身的數(shù)據(jù)和方法實(shí)行protection(private, protected,public)

2. 繼承:廣義的繼承有三種實(shí)現(xiàn)形式:實(shí)現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實(shí)現(xiàn)代碼)、接口繼承(僅使用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn))。前兩種(類繼承)和后一種(對(duì)象組合=>接口繼承以及純虛函數(shù))構(gòu)成了功能復(fù)用的兩種方式。

3. 多態(tài):是將父對(duì)象設(shè)置成為和一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。簡(jiǎn)單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。

下面函數(shù)的返回值(微軟)

int func(x)

{

int countx = 0;

while(x)

{

countx ++;

x = x&(x-1);

}

return countx;

}

假定x = 9999。 答案:8

思路:將x轉(zhuǎn)化為2進(jìn)制,看含有的1的個(gè)數(shù)。

strcat能把strSrc的內(nèi)容連接到strDest,為什么還要char *類型的返回值

方便賦值給其他變量

C++中什么數(shù)據(jù)分配在棧或堆中

棧: 存放局部變量,函數(shù)調(diào)用參數(shù),函數(shù)返回值,函數(shù)返回地址。由系統(tǒng)管理

堆: 程序運(yùn)行時(shí)動(dòng)態(tài)申請(qǐng),new 和malloc申請(qǐng)的內(nèi)存就在堆上

請(qǐng)說出 const 與 #define 相比,有何優(yōu)點(diǎn)?

答案:

Const作用:定義常量、修飾函數(shù)參數(shù)、修飾函數(shù)返回值三個(gè)作用。被Const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。

1 ) const 常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型 。編譯器可以對(duì)前者進(jìn)行類型 安全檢查 。而對(duì)后者只進(jìn)行字符替換,沒有類型安全檢查,并且在字符替換可能會(huì)產(chǎn)生意料不到的錯(cuò)誤。

2 ) 有些集成化的調(diào)試工具可以對(duì) const 常量進(jìn)行調(diào)試 ,但是不能對(duì)宏常量進(jìn)行調(diào)試。

http://www.mianwww.com/html/2012/11/17375.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容