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

首頁 > 編程 > C++ > 正文

C++的一些問題匯總

2020-02-24 14:38:06
字體:
來源:轉載
供稿:網友

今天小編跟大家分享一下C++的一些問題匯總,感興趣的朋友跟小編一起來了解一下吧!

下面詳細介紹

一、初始化與初始賦值
首先說說類的初始化與初始賦值之前的區別,這也許里面可能有我們不知道的事情。
其實類初始化與初始賦值還是有區別的。


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++規定,對象的成員變量初始化動作發生在進入構造函數本體之前。在構造函數內成員變量賦值都不是初始化,而是賦值。
賦值時首先調用默認構造函數為m_sName,m_iAge,m_iHeight賦初始值,然后在立刻調用賦值操作符進行賦新值。
成員初始列表是將各個成員變量實參都作為復制構造函數的實參。
所以看出賦值相對于初始化,多了一步就是使用賦值操作符進行賦值。所以初始化的效率比賦值的效率高多了。但是對于內置類型,它們效率是一樣的。

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

?

?


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


原因是類成員函數或者友元函數嘗試拷貝對象,編譯器便會嘗試生成一個復制構造函數與賦值操作符,并會調用基類的對應函數,但是會被拒絕,因為基類這些函數是private。

3、++函數

  下面說說“*++"與"++*"中你不知道的事情,c++規定后綴形式自加函數有一個int類型參數,當函數被調用時,便其一傳遞一個0作為int參數的值傳遞給該函數,而前綴形式自己函數,類型參數沒有要求,所以這樣就能區分一個++函數是前綴形式與后綴形式了,具體代碼如下:

?

?


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;
}


后綴函數使用返回參數類型const,是為了避免下面代碼生效

?

?


?UPInt i;
?i++++;


這個時候第一次調用++返回cosnt對象,并再次調用然后這個函數是non-const成員函數,所以const對象無法調用這個函數,那么i++++就無法生效了。
這里說說效率問題,我們可以看到后綴++函數建立一個臨時對象以作為它返回值,這個臨時對象經過構造并在最后被析構。而前綴++函數沒有這樣的臨時變量,并且沒有那樣的操作。所以如果我們在程序中使用前綴++效率會更加高一些,沒有了臨時變量的構造與析構的動作。

4.虛析構函數
帶有多態性質的base class應該聲明一個virtual析構函數。
為什么這么說呢?看下面例子

?

?


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

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

?
?假設這里基類的析構函數不是virtual,當使用完p指針,我們刪除它的時候,想想會發生什么,因為基類的析構函數是non-virtual所以不會發生多態直接調用基類析構函數,僅僅刪除繼承類中基類那部分內容,那么繼承類對象其他內存沒有被銷毀,從而資源泄漏。
??? 如果將其聲明為virtual,那么就會發生多態,調用的是指向繼承類的指針,那么就會銷毀的是整個繼承類象。

5.傳遞方式用引用
?缺省情況下c++以值傳遞方式傳遞對象至函數。函數參數都是以實際實參的復件為初值,而調用端所獲得的是函數返回值的一個附件。這些復件都是由拷貝構造函數產出??慈缦吕?/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;
???????? };

?


那么如果有一個函數驗證是否為學生

?

?

?


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


分析這3行代碼,編譯器到底做了什么?首先調用Student的copy構造函數,然后以plato為藍本將s初始化,當validateStudent返回被銷毀,所以成本為"一次Student copy構造函數調用,加上一次Student析構函數調用"。
Student對象內部有兩個string對象,所以構造了兩個string對象。Student繼承自Person對象,里面又有兩個string對象。所以by value方式傳遞一個Student對象,總體成本是"六次構造函數和六次析構函數"!

以by reference方式傳遞參數也可避免對象切割問題。當一個derived class對象以by value方式傳遞并被視為一個base class對象,base class的copy構造函數會被調用,造成像derived class對象全被切割掉了,僅僅留下base class對象??慈缦麓a通過傳遞引用參數完成多態

?

?

?

?


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

//傳入Windos類型,調用其display函數
//傳入WindowWithScrollBars類型,調用其display函數
//體現多態
void printNameAndDispaly(const Window& w)
{
std::cout w.display();
}


窺視c++編譯器的底層,reference往往以指針實現出來,因此pass by reference真正傳遞的是指針。如果對象屬于內置型,pass by value往往比pass by reference 效率高些。

以上所述就是C++的一些問題匯總的介紹,希望大家能夠喜歡,更多內容請繼續關注武林技術頻道網站!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品videos性欧美| 亚洲91精品在线观看| 午夜精品99久久免费| 成人黄色大片在线免费观看| 欧美精品电影免费在线观看| 91精品国产91久久久久久最新| 91av视频在线| 亚洲成成品网站| 亚洲男人第一av网站| 一个色综合导航| 国产一区二区三区在线观看视频| 日本成人黄色片| 亚洲国产精品yw在线观看| 国产精品久久久久7777婷婷| 一区二区三区久久精品| 国产一区香蕉久久| 中文综合在线观看| 热99精品只有里视频精品| 久久艳片www.17c.com| 欧洲一区二区视频| 欧美视频在线视频| 欧美国产高跟鞋裸体秀xxxhd| 麻豆国产精品va在线观看不卡| 美女av一区二区三区| 国产成人精品a视频一区www| 久久久久国产一区二区三区| 久久亚洲一区二区三区四区五区高| 91精品久久久久久久久青青| 亚洲最大在线视频| 7777精品久久久久久| 国产91网红主播在线观看| 揄拍成人国产精品视频| 日韩av在线播放资源| 亚洲欧美国产精品va在线观看| 久久精视频免费在线久久完整在线看| 成人欧美在线观看| 欧美亚洲在线观看| 亚洲欧美另类自拍| 亚洲aaa激情| 久久不射电影网| 97av在线影院| 精品久久久久久中文字幕一区奶水| 久热精品视频在线| 久久久久久久久久亚洲| 国产精品影院在线观看| 中文字幕一区电影| 青青精品视频播放| 中文字幕亚洲欧美日韩高清| 日韩在线视频观看| 狠狠综合久久av一区二区小说| 91av在线网站| 55夜色66夜色国产精品视频| 国产丝袜一区二区三区免费视频| 精品福利一区二区| www.欧美精品一二三区| 欧美疯狂xxxx大交乱88av| 亚洲跨种族黑人xxx| 欧美日韩亚洲天堂| 欧美日韩国产专区| 国产91精品黑色丝袜高跟鞋| 国产69久久精品成人看| 日本久久久久久久久久久| 91九色视频在线| 亚洲欧美日韩网| 国产精品情侣自拍| 美女国内精品自产拍在线播放| 日韩欧美国产高清91| 亚洲第一网站男人都懂| 色琪琪综合男人的天堂aⅴ视频| 欧美亚洲视频在线看网址| 91国产中文字幕| 亚洲人成伊人成综合网久久久| 欧美精品成人91久久久久久久| 国产精品视频在线播放| 中文字幕国产亚洲| 亚洲高清在线观看| 久久人91精品久久久久久不卡| 懂色av影视一区二区三区| 成人免费午夜电影| 97视频在线观看免费| 亚洲国产精品va在线看黑人动漫| 精品国产乱码久久久久久虫虫漫画| 欧美性精品220| 欧美最顶级丰满的aⅴ艳星| 亚洲欧美制服综合另类| 国产成+人+综合+亚洲欧洲| 日韩欧美在线视频观看| 色综合男人天堂| 中文字幕不卡在线视频极品| 精品动漫一区二区| 欧美巨大黑人极品精男| 国产91在线播放精品91| 欧美精品免费在线观看| 成人久久一区二区| 久久精品国产成人| 欧美一区二区三区精品电影| 亚洲大胆人体视频| 亚洲三级 欧美三级| 国语自产精品视频在线看| 日韩av免费在线看| 国产精品视频久久久久| 亚洲欧美一区二区三区情侣bbw| 欧美日韩国产成人在线| 国产精品成人av性教育| 亚洲精品中文字幕有码专区| 亚洲国产97在线精品一区| 欧美日韩国产色视频| 欧美亚洲第一页| 久久亚洲精品国产亚洲老地址| 日韩毛片中文字幕| 欧美理论电影在线播放| 青草青草久热精品视频在线网站| 亚洲成人网久久久| 久久久久久久久久国产精品| 国内精品小视频| 日韩高清免费观看| 久久精品国产久精国产一老狼| 一夜七次郎国产精品亚洲| 国产黑人绿帽在线第一区| 日韩精品在线观看一区| 国外成人在线视频| 中文字幕欧美国内| 日韩欧美在线观看视频| 久久偷看各类女兵18女厕嘘嘘| 国产精品入口尤物| 精品久久久久久电影| www.亚洲天堂| 国产成+人+综合+亚洲欧洲| 国产成人jvid在线播放| 91精品国产乱码久久久久久久久| 日韩欧美极品在线观看| 国产一区二区三区直播精品电影| 欧美成人免费在线观看| 国产精品男女猛烈高潮激情| 国产精品日日做人人爱| 成人国产在线视频| 国产精品国产三级国产专播精品人| 午夜精品久久久久久久白皮肤| 青青久久av北条麻妃黑人| 国产精品福利无圣光在线一区| 日韩在线高清视频| 6080yy精品一区二区三区| 亚洲精品美女网站| 欧美视频一区二区三区…| 日本中文字幕成人| 奇米四色中文综合久久| 欧美在线视频免费观看| 福利一区视频在线观看| 亚洲成人黄色在线观看| 热久久视久久精品18亚洲精品| 97精品国产91久久久久久| 亚洲成人精品久久| 91精品国产综合久久男男| 国产精品扒开腿做爽爽爽的视频| 92福利视频午夜1000合集在线观看| 国产91色在线免费| 色综合久久久888| 日韩最新av在线| 在线观看中文字幕亚洲| 日韩国产精品亚洲а∨天堂免| 欧美日韩午夜激情| 欧美大片在线看免费观看| 国内偷自视频区视频综合| 亚洲精品720p|