www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]2014年我寫的博客比較少,總結(jié)的也比較少。2015年我絕對(duì)不能松懈,畢竟知識(shí)不總結(jié)容易遺忘。2014年有很多工作沒(méi)完成,比如找個(gè)好的大公司實(shí)習(xí)結(jié)果來(lái)了個(gè)小公司、學(xué)習(xí)Java、Python、在gith

2014年我寫的博客比較少,總結(jié)的也比較少。2015年我絕對(duì)不能松懈,畢竟知識(shí)不總結(jié)容易遺忘。2014年有很多工作沒(méi)完成,比如找個(gè)好的大公司實(shí)習(xí)結(jié)果來(lái)了個(gè)小公司、學(xué)習(xí)Java、Python、在github上搭建自己的個(gè)人博客都沒(méi)有完成。2015年,有很多事情要做,秋季找正式工作、畢業(yè)論文等,所以更加需要總結(jié)所學(xué)知識(shí),為秋季招聘做準(zhǔn)備。今年年假13天里,學(xué)習(xí)方面只把《C++ Primer》這本書過(guò)了一遍。下面是對(duì)相關(guān)知識(shí)點(diǎn)做的小結(jié)。 ??

構(gòu)造函數(shù)的調(diào)用順序?yàn)椋赫{(diào)用基類的構(gòu)造函數(shù)->調(diào)用成員對(duì)象的構(gòu)造函數(shù)->調(diào)用自身的構(gòu)造函數(shù),析構(gòu)函數(shù)調(diào)用反之。

9,解釋堆和棧的區(qū)別

答:1、棧區(qū)(stack)—由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

由系統(tǒng)自動(dòng)分配。聲明在函數(shù)中一個(gè)局部變量 int b;系統(tǒng)自動(dòng)在棧中為b開辟空間。

只要棧的剩余空間大于所申請(qǐng)空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提示棧溢出。

在Windows下,棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域,棧的大小是2M。

如果申請(qǐng)的空間超過(guò)棧的剩余空間時(shí),將提示overflow。

棧由系統(tǒng)自動(dòng)分配,速度較快。但程序員是無(wú)法控制的。

函數(shù)調(diào)用時(shí),第一個(gè)進(jìn)棧的是主函數(shù)中后的下一條指令,的地址,然后是函數(shù)的各個(gè)參數(shù)。

在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧的,然后是函數(shù)中的局部變量。注意靜態(tài)變量是不入棧的。

?

堆區(qū)(heap)—一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收。

注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表,需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù)

在C++中用new運(yùn)算符。首先應(yīng)該知道操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請(qǐng)時(shí),

另外,由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的大小,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中。

堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。而鏈表的遍歷方向是由低地址向高地址。

堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。

堆是由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過(guò)用起來(lái)最方便

一般是在堆的頭部用一個(gè)字節(jié)存放堆的大小。


11,C++的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?

class Empty

{

? public:

? Empty(); //缺省構(gòu)造函數(shù)

? Empty( const Empty& ); //拷貝構(gòu)造函數(shù)

? ~Empty(); //析構(gòu)函數(shù)

? Empty& operator=( constEmpty& ); //賦值運(yùn)算符

? Empty* operator&(); //取址運(yùn)算符

? const Empty* operator&()const; //取址運(yùn)算符 const

};

默認(rèn)構(gòu)造函數(shù) ??
析構(gòu)函數(shù) ??
拷貝構(gòu)造函數(shù) ??
賦值運(yùn)算符(operator=) ??
取址運(yùn)算符(operator&)(一對(duì),一個(gè)非const的,一個(gè)const的)?

12,談?wù)勵(lì)惡徒Y(jié)構(gòu)體的區(qū)別

答:結(jié)構(gòu)體在默認(rèn)情況下的成員都是public的,而類在默認(rèn)情況下的成員是private的。結(jié)構(gòu)體和類都必須使用new創(chuàng)建,

struct保證成員按照聲明順序在內(nèi)存在存儲(chǔ),而類不保證。

13,const_cast 、static_cast、dymnaic_cast及reinterpreter_cast的區(qū)別?

答:(1)const_cast

字面上理解就是去const屬性,去掉類型的const或volatile屬性。

struct SA{?int k};?const SA ra;??

ra.k = 10;???//直接修改const類型,編譯錯(cuò)誤??SA& rb =?const_cast

?

(2)static_cast//居中

主要用于基本類型之間和具有繼承關(guān)系的類型之間的轉(zhuǎn)換。用于指針類型的轉(zhuǎn)換沒(méi)有太大的意義

static_cast是無(wú)條件和靜態(tài)類型轉(zhuǎn)換,可用于基類和子類的轉(zhuǎn)換,基本類型轉(zhuǎn)換,把空指針轉(zhuǎn)換為目標(biāo)類型的空指針,

把任何類型的表達(dá)式轉(zhuǎn)換成void類型,static_cast不能進(jìn)行無(wú)關(guān)類型(如非基類和子類)指針之間的轉(zhuǎn)換。

int a;????double d = static_cast

int &pn = &a;????void *p =static_cast

?

(3)dynamic_cast//比較安全的轉(zhuǎn)化

?你可以用它把一個(gè)指向基類的指針或引用對(duì)象轉(zhuǎn)換成繼承類的對(duì)象

動(dòng)態(tài)類型轉(zhuǎn)換,運(yùn)行時(shí)類型安全檢查(轉(zhuǎn)換失敗返回NULL)

基類必須有虛函數(shù),保持多態(tài)特性才能用dynamic_cast

只能在繼承類對(duì)象的指針之間或引用之間進(jìn)行類型轉(zhuǎn)換

class BaseClass{public:?int m_iNum;?virtual void foo(){};};

class DerivedClass:BaseClass{public: char*szName[100];?void bar(){};};

BaseClass* pb = new DerivedClass();

?DerivedClass *p2 =dynamic_cast

BaseClass* pParent =dynamic_cast

//子類->父類,動(dòng)態(tài)類型轉(zhuǎn)換,正確

當(dāng)基類指針指向基類時(shí)不能通過(guò)這種轉(zhuǎn)化為子類指針

?(4)reinterpreter_cast//最暴力的轉(zhuǎn)化

轉(zhuǎn)換的類型必須是一個(gè)指針、引用、算術(shù)類型、函數(shù)指針或者成員指針。

主要是將一個(gè)類型的指針,轉(zhuǎn)換為另一個(gè)類型的指針

不同類型的指針類型轉(zhuǎn)換用reinterpreter_cast

最普通的用途就是在函數(shù)指針類型之間進(jìn)行轉(zhuǎn)換

int DoSomething(){return 0;};

typedef void(*FuncPtr)(){};

FuncPtr funcPtrArray[10];

funcPtrArray[0] =reinterpreter_cast


16,簡(jiǎn)單敘述面向?qū)ο蟮娜齻€(gè)基本特征

答:封裝性

把客觀事物封裝成抽象的類,對(duì)自身的數(shù)據(jù)和方法進(jìn)行(public,private, protected)

繼承性

繼承概念的實(shí)現(xiàn)方式有三類:實(shí)現(xiàn)繼承、接口繼承和可視繼承。

實(shí)現(xiàn)繼承是指使用基類的屬性和方法而無(wú)需額外編碼的能力;

接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力;

可視繼承是指子窗體(類)使用基窗體(類)的外觀和實(shí)現(xiàn)代碼的能力。

抽象類僅定義將由子類創(chuàng)建的一般屬性和方法,創(chuàng)建抽象類時(shí),請(qǐng)使用關(guān)鍵字 Interface而不是 Class

多態(tài)性

多態(tài)性(polymorphisn)是允許你將父對(duì)象設(shè)置成為和一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,

父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。允許將子類類型的指針賦值給父類類型的指針。

實(shí)現(xiàn)多態(tài),有二種方式,覆蓋(子類重新定義父類的虛函數(shù)),重載(允許存在多個(gè)同名函數(shù),參數(shù)個(gè)數(shù),類型不同)。


18,什么是預(yù)編譯,何時(shí)需要預(yù)編譯

答:就是指程序執(zhí)行前的一些預(yù)處理工作,主要指#表示的.

需要預(yù)編譯的情況:總是使用不經(jīng)常改動(dòng)的大型代碼體。所有模塊都使用一組標(biāo)準(zhǔn)的包含文件和相同的編譯選項(xiàng)。

http://feihe027.blog.163.com/blog/static/5932583320130256177961/


19,memset ,memcpy和strcpy的根本區(qū)別?

答:memset用來(lái)對(duì)一段內(nèi)存空間全部設(shè)置為某個(gè)字符,一般用在對(duì)定義的字符串進(jìn)行初始化為' '或'';

它對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法。

char temp[30];????memset(temp,'