亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C++ > 正文

C++的一些問(wèn)題匯總

2020-02-24 14:38:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天小編跟大家分享一下C++的一些問(wèn)題匯總,感興趣的朋友跟小編一起來(lái)了解一下吧!

下面詳細(xì)介紹

一、初始化與初始賦值
首先說(shuō)說(shuō)類(lèi)的初始化與初始賦值之前的區(qū)別,這也許里面可能有我們不知道的事情。
其實(shí)類(lèi)初始化與初始賦值還是有區(qū)別的。


class People{
public:
People(std::string name,int age,int height);
private:
std::string m_sName;
int m_iAge;
int m_iHeight;
}
//賦值
People::People(std::string name,int age,int height)
{
m_sName=name;
m_iAge=age;
m_iHeight=height;
}
//初始化列表
People::People(std::string name,int age,int height)
:m_sName(name),m_iAge(age),m_iHeight(height)
{}


C++規(guī)定,對(duì)象的成員變量初始化動(dòng)作發(fā)生在進(jìn)入構(gòu)造函數(shù)本體之前。在構(gòu)造函數(shù)內(nèi)成員變量賦值都不是初始化,而是賦值。
賦值時(shí)首先調(diào)用默認(rèn)構(gòu)造函數(shù)為m_sName,m_iAge,m_iHeight賦初始值,然后在立刻調(diào)用賦值操作符進(jìn)行賦新值。
成員初始列表是將各個(gè)成員變量實(shí)參都作為復(fù)制構(gòu)造函數(shù)的實(shí)參。
所以看出賦值相對(duì)于初始化,多了一步就是使用賦值操作符進(jìn)行賦值。所以初始化的效率比賦值的效率高多了。但是對(duì)于內(nèi)置類(lèi)型,它們效率是一樣的。

二、空類(lèi)
  想想你如果聲明一個(gè)空類(lèi),C++編譯器會(huì)對(duì)它做什么呢?編譯器就會(huì)為它聲明一個(gè)復(fù)制構(gòu)造函數(shù),賦值操作符和一個(gè)析構(gòu)函數(shù),以及默認(rèn)構(gòu)造函數(shù)。所有這些函數(shù)都是public而且inline函數(shù)。
編譯器寫(xiě)的賦值構(gòu)造函數(shù)和賦值操作符,只是單純地將來(lái)源對(duì)象的每個(gè)non-static變量拷貝到目標(biāo)對(duì)象,具體是進(jìn)行位拷貝。
如果聲明了一個(gè)構(gòu)造函數(shù),編譯器是不會(huì)創(chuàng)建默認(rèn)構(gòu)造函數(shù)。
  如果不希望類(lèi)支持拷貝構(gòu)造函數(shù)與賦值操作符怎么辦?不聲明?按照上面說(shuō)明編譯器會(huì)自動(dòng)幫你生成。那么可以將它們聲明為private,這樣阻止編譯器自動(dòng)生成拷貝構(gòu)造函數(shù)(public)。private成功阻止他人使用,但是這并不安全。因?yàn)轭?lèi)成員函數(shù)以及友元函數(shù)還是可以調(diào)用private的拷貝構(gòu)造函數(shù)和賦值操作符。
如果只在private下聲明拷貝函數(shù)和賦值操作符,在有人通過(guò)類(lèi)成員函數(shù)去以及member函數(shù)去調(diào)用它,會(huì)獲得一個(gè)連接錯(cuò)誤。那么這里能不能將錯(cuò)誤在編譯的時(shí)候體現(xiàn)出來(lái)呢?這里只用將拷貝函數(shù)聲明為private,并且不在自身,就可以辦到了。顯然繼承一個(gè)拷貝函數(shù)和賦值操作符為private的基類(lèi)就辦到了,基類(lèi)如下:

?

?


class NonCopyable{
???????? protected:
????????????????? NonCopyable (){}
???????????????? ~? NonCopyable (){}
???????? private:
????????????? NonCopyable (const? NonCopyable &);
????????????? NonCopyable & operater=(const? NonCopyable &);
???????? };


原因是類(lèi)成員函數(shù)或者友元函數(shù)嘗試拷貝對(duì)象,編譯器便會(huì)嘗試生成一個(gè)復(fù)制構(gòu)造函數(shù)與賦值操作符,并會(huì)調(diào)用基類(lèi)的對(duì)應(yīng)函數(shù),但是會(huì)被拒絕,因?yàn)榛?lèi)這些函數(shù)是private。

3、++函數(shù)

  下面說(shuō)說(shuō)“*++"與"++*"中你不知道的事情,c++規(guī)定后綴形式自加函數(shù)有一個(gè)int類(lèi)型參數(shù),當(dāng)函數(shù)被調(diào)用時(shí),便其一傳遞一個(gè)0作為int參數(shù)的值傳遞給該函數(shù),而前綴形式自己函數(shù),類(lèi)型參數(shù)沒(méi)有要求,所以這樣就能區(qū)分一個(gè)++函數(shù)是前綴形式與后綴形式了,具體代碼如下:

?

?


class UPInt{
public
UPInt& operator++( ) ; //++ 前綴
const UPInt operator++( int ); //++后綴
UPInt& operator --( ); // --前綴
const UPInt operator --( int ) //--后綴
UPInt& operator +=( int ); //
...
};

UPInt & UPInt::operator++( )
{
*this += 1;
return *this;
}

const UPInt UPInt :: operator++( int )
{
UPInt oldValue = *this;
++(*this);
return oldValue;
}


后綴函數(shù)使用返回參數(shù)類(lèi)型const,是為了避免下面代碼生效

?

?


?UPInt i;
?i++++;


這個(gè)時(shí)候第一次調(diào)用++返回cosnt對(duì)象,并再次調(diào)用然后這個(gè)函數(shù)是non-const成員函數(shù),所以const對(duì)象無(wú)法調(diào)用這個(gè)函數(shù),那么i++++就無(wú)法生效了。
這里說(shuō)說(shuō)效率問(wèn)題,我們可以看到后綴++函數(shù)建立一個(gè)臨時(shí)對(duì)象以作為它返回值,這個(gè)臨時(shí)對(duì)象經(jīng)過(guò)構(gòu)造并在最后被析構(gòu)。而前綴++函數(shù)沒(méi)有這樣的臨時(shí)變量,并且沒(méi)有那樣的操作。所以如果我們?cè)诔绦蛑惺褂们熬Y++效率會(huì)更加高一些,沒(méi)有了臨時(shí)變量的構(gòu)造與析構(gòu)的動(dòng)作。

4.虛析構(gòu)函數(shù)
帶有多態(tài)性質(zhì)的base class應(yīng)該聲明一個(gè)virtual析構(gòu)函數(shù)。
為什么這么說(shuō)呢?看下面例子

?

?


??????? class base
??????? { ... }
??????? class derived:public base
??????? {... }

??????? base * p= new derived;????

?
?假設(shè)這里基類(lèi)的析構(gòu)函數(shù)不是virtual,當(dāng)使用完p指針,我們刪除它的時(shí)候,想想會(huì)發(fā)生什么,因?yàn)榛?lèi)的析構(gòu)函數(shù)是non-virtual所以不會(huì)發(fā)生多態(tài)直接調(diào)用基類(lèi)析構(gòu)函數(shù),僅僅刪除繼承類(lèi)中基類(lèi)那部分內(nèi)容,那么繼承類(lèi)對(duì)象其他內(nèi)存沒(méi)有被銷(xiāo)毀,從而資源泄漏。
??? 如果將其聲明為virtual,那么就會(huì)發(fā)生多態(tài),調(diào)用的是指向繼承類(lèi)的指針,那么就會(huì)銷(xiāo)毀的是整個(gè)繼承類(lèi)象。

5.傳遞方式用引用
?缺省情況下c++以值傳遞方式傳遞對(duì)象至函數(shù)。函數(shù)參數(shù)都是以實(shí)際實(shí)參的復(fù)件為初值,而調(diào)用端所獲得的是函數(shù)返回值的一個(gè)附件。這些復(fù)件都是由拷貝構(gòu)造函數(shù)產(chǎn)出??慈缦吕?/p>


class Person{
???????? public:
???????????? Person();
???????????? virtual ~Person();
???????????? ...
???????? private:
???????????? std::string name;
???????????? std::string address;
???????? }

???????? class Student:public Person{
???????? public:
???????????? Student();
???????????? ~Student();
???????????? ...
???????? private:
???????????? std::string schoolName;
???????????? std::string schoolAddress;
???????? };

?


那么如果有一個(gè)函數(shù)驗(yàn)證是否為學(xué)生

?

?

?


bool validateStudent(Student s);
Student plato;
bool platoIsOK=validateStudent(plato);  


分析這3行代碼,編譯器到底做了什么?首先調(diào)用Student的copy構(gòu)造函數(shù),然后以plato為藍(lán)本將s初始化,當(dāng)validateStudent返回被銷(xiāo)毀,所以成本為"一次Student copy構(gòu)造函數(shù)調(diào)用,加上一次Student析構(gòu)函數(shù)調(diào)用"。
Student對(duì)象內(nèi)部有兩個(gè)string對(duì)象,所以構(gòu)造了兩個(gè)string對(duì)象。Student繼承自Person對(duì)象,里面又有兩個(gè)string對(duì)象。所以by value方式傳遞一個(gè)Student對(duì)象,總體成本是"六次構(gòu)造函數(shù)和六次析構(gòu)函數(shù)"!

以by reference方式傳遞參數(shù)也可避免對(duì)象切割問(wèn)題。當(dāng)一個(gè)derived class對(duì)象以by value方式傳遞并被視為一個(gè)base class對(duì)象,base class的copy構(gòu)造函數(shù)會(huì)被調(diào)用,造成像derived class對(duì)象全被切割掉了,僅僅留下base class對(duì)象??慈缦麓a通過(guò)傳遞引用參數(shù)完成多態(tài)

?

?

?

?


class Window{
public:
...
std::string name() const;
virtual void display() const;
};
class WindowWithScrollBars:public Window{
public:
...
virtual void display() const;
};

//傳入Windos類(lèi)型,調(diào)用其display函數(shù)
//傳入WindowWithScrollBars類(lèi)型,調(diào)用其display函數(shù)
//體現(xiàn)多態(tài)
void printNameAndDispaly(const Window& w)
{
std::cout w.display();
}


窺視c++編譯器的底層,reference往往以指針實(shí)現(xiàn)出來(lái),因此pass by reference真正傳遞的是指針。如果對(duì)象屬于內(nèi)置型,pass by value往往比pass by reference 效率高些。

以上所述就是C++的一些問(wèn)題匯總的介紹,希望大家能夠喜歡,更多內(nèi)容請(qǐng)繼續(xù)關(guān)注武林技術(shù)頻道網(wǎng)站!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
黄色一级片中国| 欧美影院在线播放| 亚洲国产高潮在线观看| 国产高清在线一区| 一本大道熟女人妻中文字幕在线| 97在线看福利| 成人国产视频在线| 天然素人一区二区视频| 国产精品欧美大片| 精品久久久久久久久久久久久久| 国产精品一区在线观看乱码| 亚洲午夜精品久久久久久浪潮| 日韩经典中文字幕在线观看| 丝袜理论片在线观看| h视频在线免费看| 日本亚州欧洲精品不卡| 亚洲人成网站色在线观看| 精品国产视频在线| 国产伦精品一区二区三区妓女下载| 美女精品视频| 久久精品色欧美aⅴ一区二区| 亚洲乱码精品一二三四区日韩在线| 资源视频在线播放免费| 国模大尺度视频一区二区| 亚洲精品国产第一综合99久久| 久久精品九色| aⅴ在线视频男人的天堂| 精品久久久久99| 视频一区视频二区视频三区高| 国产亚洲成av人片在线观看桃| 香蕉成人在线| 欧美麻豆久久久久久中文| av国产在线观看| 久久看片网站| 91极品视频在线观看| 日韩av理论片| 人妻无码久久一区二区三区免费| 咪咪网在线视频| 国产日韩中文字幕在线| 国产性xxxx18免费观看视频| 极品销魂一区二区三区| 免费高清在线观看电视| 欧美极品另类| 九色91popny| 国产精品对白刺激久久久| 私拍精品福利视频在线一区| 欧美××××黑人××性爽| 精品一区二区在线观看视频| 亚洲欧美一区二区三| 国产在线观看一区二区三区| 99热在这里有精品免费| 922tv免费观看在线| 无线免费在线视频| 亚洲大肥女ass| 国产盗摄xxxx视频xxx69| 春色成人在线视频| 成年人午夜视频在线观看| 亚洲一区成人在线| 国产日本欧美一区| 视频区 图片区 小说区| 星空影院最新电视剧免费观看| 亚洲精品自在在线观看| 91成人福利在线观看| 亚洲欧美另类久久久精品| 亚洲韩国欧洲国产日产av| 91产国在线观看动作片喷水| 国产精品爽黄69天堂a| 91亚洲精品久久久| 国产久一一精品| 天堂а√在线8种子蜜桃视频| 一区二区三欧美| 极品粉嫩美女露脸啪啪| 日本不卡视频一区二区| 日日夜夜精品视频天天综合网| 一二区在线观看| www.国产精品| 午夜精品视频一区二区三区在线看| 国产精品美女久久久久| 精品视频导航| 天堂在线视频免费观看| 日韩欧美亚洲一区二区三区| 久久久免费毛片| 捆绑调教日本一区二区三区| 91精品视频免费看| 欧美精品tushy高清| 这里只有视频精品| 精品国产二区三区| 亚洲视频精品在线观看| 久久久无码中文字幕久...| 在线视频欧美日韩精品| 欧美1级日本1级| 无码人妻丰满熟妇区96| 国产又粗又猛又爽又黄的网站| 亚洲黄色小说图片| 精品视频一区二区三区四区| 91亚洲精华国产精华| 国产欧美va欧美不卡在线| 人人超碰91尤物精品国产| 欧洲乱码伦视频免费| 99久久人妻无码中文字幕系列| 亚洲啪啪综合av一区二区三区| 欧美一区二区视频在线播放| 日本免费一级视频| 久久久视频6r| 久久香蕉国产线看观看99| 桃花色综合影院| 2021久久国产精品不只是精品| 日韩视频免费看| 欧美特级aaa| 一区二区三区国产视频| 精品无码久久久久久久| 在线观看视频h| 欧美日韩激情美女| 牛夜精品久久久久久久99黑人| 不卡视频一区二区三区| 国产精品suv一区二区88| 亚洲春色在线| 制服丝袜网站| 国产一区二区网址| 天天爽夜夜爽夜夜爽| www.99热这里只有精品| 亚洲国产精品精华液ab| 亚洲第一色网站| 老司机久久99久久精品播放免费| 精品69视频一区二区三区Q| 免费久久99精品国产自在现线| 日本欧美三级| 日本不良网站在线观看| 精品国产亚洲一区二区三区在线观看| 国产午夜福利精品| 视频免费1区二区三区| 成人午夜精品久久久久久久蜜臀| 九九热这里只有在线精品视| 午夜a成v人精品| 青青草99啪国产免费| 久久久久久久久久久久久久久久久久久| 制服诱惑亚洲| 久久99国产精品视频| 亚洲欧美高清视频| 日韩成人av一区二区| 国产精品无码2021在线观看| 久草视频视频在线播放| 免费成人在线视频观看| 九九在线高清精品视频| 日本福利在线| 强伦女教师2:伦理在线观看| 久久久噜噜噜久久中文字免| 国产激情精品一区二区三区| 国产亚洲一区二区在线观看| 久久一区二区中文字幕| 欧美xxxx日本和非洲| 黄色亚洲大片免费在线观看| www.一区| 国产精品免费91| 色久优优欧美色久优优| 久久久国产成人精品| 国产精品毛片一区视频| 国产精品一区二区三区在线免费观看| 悠悠资源av网址| 舐め犯し波多野结衣在线观看| 91精品国产色综合久久不卡98| 久久国产精品亚洲人一区二区三区| 鲁大师私人影院在线观看| 国产刺激高潮av| 婷婷丁香激情综合| 亚洲精品**不卡在线播he| 日韩成人一区二区| 免费观看一级欧美片| 一区二区三区免费视频网站| 韩日成人在线| 精品国产一区二区三区久久| 久久精品国产精品| 国产日韩三级在线| 91蜜桃臀久久一区二区| 两个人hd高清在线观看| 日韩高清在线观看一区二区| 神马午夜dy888| 中文字幕欧美日韩一区二区三区| 色婷婷av一区二区三区之e本道| 天堂99x99es久久精品免费| 天天射夜夜爽| 久久久精品视频在线观看| 一区二区三区成人精品| 精品亚洲一区二区三区| 久草在线在线视频| 国产日韩精品在线播放| 亚洲精品中文字幕| 永久免费在线观看视频| 成人一级视频在线观看| 99国产欧美另类久久久精品| 一个人在线观看免费视频www| 亚洲欧美国产精品va在线观看| 日本少妇毛茸茸高潮| 中文字幕在线观看2018| 亚洲综合在线视频| 自拍视频在线网| 深夜视频在线观看| wwwxxx亚洲| 色精品一区二区三区| 亚洲午夜精品久久久中文影院av| 亚洲综合免费观看高清完整版在线| 日本视频在线观看一区二区三区| 欧美综合一区二区三区| 一区在线播放视频| 黄色免费网站观看| 日韩av片免费观看| 亚洲综合在线电影| 国产精品9191| 亚洲欧美日韩中文视频| 亚洲国产aⅴ精品| 亚洲国产免费| 日韩伦理三区| 嫩草影院在线观看网站成人| 波多野结衣一区二区三区在线观看| 日韩成人一级大片| 99久久自偷自偷国产精品不卡| 亚洲精品a级片| 中文字幕av中文字幕| 2欧美一区二区三区在线观看视频| 欧美久久久久久久久久久久| 一二三区视频在线观看| 久99久视频| 91综合网人人| 激情视频免费观看在线| 亚洲精品视频在线观看免费| 91麻豆国产精品久久| 国产视频不卡一区| 亚洲性猛交xxxxwww| 亚洲精品日产精品乱码不卡| 日本二三区不卡| 污污视频在线免费看| 中文字幕永久视频| 天堂资源最新在线| 伊人国产视频| 美女不穿衣服的网站| 中文字幕在线视频第一页| 精品视频在线播放| 精品国产免费一区二区三区香蕉| 国产欧美一区二区在线| 亚洲成熟丰满熟妇高潮xxxxx| 日韩精品视频在线观看免费| av激情亚洲男人天堂| 欧美人成在线观看ccc36| 日本不卡一区二区在线观看| 日韩精品在线免费观看视频| 日韩国产成人无码av毛片| 亚洲精美色品网站| 国产精品网曝门| 国产精品精品一区二区三区午夜版| 综合激情网站| 一区二区三区在线视频免费| 国产日产欧美精品| 国产精品国产三级国产aⅴ无密码| 久久精品国产亚洲一区二区| 欧美在线色视频| 国产女女做受ⅹxx高潮| 91jq激情在线观看| 久久噜噜噜精品国产亚洲综合| 性鲍视频在线观看| 亚洲免费成人网| 亚洲精品一区三区三区在线观看| 色综合伊人色综合网| 污污网站在线免费观看| 暧暧视频免费| 2014亚洲天堂| 黄色工厂这里只有精品| 色综合天天在线| 成人网视频在线观看| 中文字幕在线视频免费| 成人一级黄色大片| 污污污www精品国产网站| 亚洲国产精品免费在线观看| 亚洲区综合中文字幕日日| 一区二区在线免费播放| 正在播放一区二区三区| 欧美日韩国产成人在线观看| 免费一级大片| 日韩一区精品视频| 国产香蕉免费精品视频| 久久人体视频| 国产精品视频一区二区三区四区五区| 亚洲精品在线视频免费| 亚洲精品一二区| 日韩中文字幕区一区有砖一区| 久久精品视频网站| 久久精精品视频| 天堂а√在线资源在线| 男女超爽视频免费播放| 又骚又黄的视频| 三级av在线播放| 91精品高清| 在线免费观看欧美| 国产精品免费无码| xxxxwww一片| 人妻少妇精品视频一区二区三区| 色噜噜久久综合伊人一本| 免费av一区二区| 伊人一区二区三区久久精品| 欧美18xxxx| 亚洲专区视频| 亚洲三级一区| 3d黄动漫网站| 日本xxxxxwwwww| 中文字幕一区二区三区四区五区人| 成人影院天天5g天天爽无毒影院| 国产另类图片| 国产不卡一卡2卡三卡4卡5卡在线| 另类专区欧美| 丝袜美腿亚洲综合| 日本高清视频在线播放| 国产原创精品在线| 亚洲污视频在线观看| 91国内精品久久久久| 欧美hdfree性xxxx| www.欧美日韩国产在线| 亚洲不卡av一区二区三区| 国产情侣呻吟对白高潮| 白白色在线发布| 99热手机在线| 欧美色图一区二区| 欧美成人高清| 精品美女久久久久久免费| 黑人一区二区| 精品欧美aⅴ在线网站| 男女h黄动漫啪啪无遮挡软件| 国产乱子精品一区二区在线观看| 99久久免费国产精精品| 欧美二区在线视频|