国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
C++學(xué)習(xí)摘要之二:構(gòu)造函數(shù)和析構(gòu)函數(shù) -計(jì)算機(jī)等級(jí)考試-考試吧
構(gòu)造函數(shù)和析構(gòu)函數(shù)是類的兩個(gè)特殊的成員函數(shù)

   1.構(gòu)造函數(shù)

   構(gòu)造函數(shù)(constructor)是類的一個(gè)特殊的成員函數(shù),它與類名同名。當(dāng)定義該類的對(duì)象時(shí),構(gòu)造函數(shù)將被系統(tǒng)自動(dòng)調(diào)用用以實(shí)現(xiàn)對(duì)該對(duì)象的初始化。

   構(gòu)造函數(shù)不能有返回值,因而不能指定包括void在內(nèi)的任何返回值類型。

   構(gòu)造函數(shù)的定義與其他成員函數(shù)的定義一樣可以放在類內(nèi)或類外。

   構(gòu)造函數(shù)的定義格式為

   類名(形參說(shuō)明)

   {函數(shù)體}

   構(gòu)造函數(shù)既可以定義成有參函數(shù),也可以定義成無(wú)參函數(shù),要根據(jù)問(wèn)題的需要來(lái)定。

   注意:程序中不能直接調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí)由系統(tǒng)直接調(diào)用的,因此,在構(gòu)造函數(shù)中一般完成初始化類成員變量的操作。

   2.構(gòu)造函數(shù)的重載

   一個(gè)類中出現(xiàn)了兩個(gè)以上的同名的成員函數(shù)時(shí),稱為類的成員函數(shù)的重載。

   在類的成員函數(shù)的重載中,比較常見(jiàn)形式是構(gòu)造函數(shù)的重載,當(dāng)類中出現(xiàn)了重載構(gòu)造函數(shù)時(shí),C++語(yǔ)言將根據(jù)構(gòu)造函數(shù)中的參數(shù)個(gè)數(shù)和類型選擇合適的構(gòu)造函數(shù)來(lái)完成對(duì)象的構(gòu)造。

   3.默認(rèn)構(gòu)造函數(shù)與缺省參數(shù)的構(gòu)造函數(shù)

   如果在類中沒(méi)有顯示定義構(gòu)造函數(shù),則編譯系統(tǒng)會(huì)為該類提供一個(gè)默認(rèn)的構(gòu)造函數(shù),該默認(rèn)構(gòu)造函數(shù)是一個(gè)無(wú)參函數(shù),函數(shù)體為空,它僅僅負(fù)責(zé)創(chuàng)建對(duì)象,而不做任何初始化工作(即不給相應(yīng)的數(shù)據(jù)成員賦初值),所以在該類的對(duì)象創(chuàng)建時(shí)不能保證有一個(gè)確定的初始狀態(tài)。

   良好的編程習(xí)慣應(yīng)該是給類提供合適的完成初始化工作的構(gòu)造函數(shù)。

   但是,只要一個(gè)類定義了一個(gè)構(gòu)造函數(shù)(不一定是無(wú)參構(gòu)造函數(shù)),編譯系統(tǒng)就不再提供默認(rèn)的構(gòu)造函數(shù)。

   當(dāng)構(gòu)造函數(shù)具有缺省參數(shù)時(shí),稱為具有缺省參數(shù)的構(gòu)造函數(shù),在使用具有缺省參數(shù)的構(gòu)造函數(shù)時(shí),要防止二義性。

   4.拷貝構(gòu)造函數(shù)

   拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù)。定義拷貝構(gòu)造函數(shù)的一般格式為

   類名::類名(const 類名 &形式參數(shù))

   { 函數(shù)體 }

   拷貝構(gòu)造函數(shù)的函數(shù)名與類名同名。該函數(shù)也沒(méi)有返回值。

   拷貝構(gòu)造函數(shù)的功能是通過(guò)將一個(gè)同類對(duì)象的值拷貝給一個(gè)新對(duì)象,來(lái)完成對(duì)新對(duì)象的初始化,即用一個(gè)對(duì)象去構(gòu)造另外一個(gè)對(duì)象。

   如果在類的定義中沒(méi)有定義拷貝構(gòu)造函數(shù),則編譯系統(tǒng)將自動(dòng)生成一個(gè)具有上述形式的默認(rèn)的拷貝構(gòu)造函數(shù),作為該類的公有成員。

    5.析構(gòu)函數(shù)

   與構(gòu)造函數(shù)對(duì)應(yīng)的是析構(gòu)函數(shù)。當(dāng)一個(gè)對(duì)象被定義時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)為該對(duì)象分配相應(yīng)的資源,當(dāng)對(duì)象使用完畢后且在對(duì)象消失前,系統(tǒng)會(huì)自動(dòng)調(diào)用類的析構(gòu)函數(shù)來(lái)釋放這些系統(tǒng)資源。

   析構(gòu)函數(shù)也是類的一個(gè)特殊的成員函數(shù),其函數(shù)名稱是在類名的前面加上“~”;它沒(méi)有返回值,也沒(méi)有參數(shù)。一個(gè)類中只能擁有一個(gè)析構(gòu)函數(shù),所以析構(gòu)函數(shù)不能重載。

   析構(gòu)函數(shù)的定義方式為

   ~類名()

   { 函數(shù)體 }

   如果程序員在定義類時(shí)沒(méi)有為類提供析構(gòu)函數(shù),則系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的析構(gòu)函數(shù),其形式為

   ~類名()

   { }

   對(duì)象被析構(gòu)的順序與其創(chuàng)建時(shí)的順序正好相反,即最后構(gòu)造的對(duì)象最先被析構(gòu)。

   如果一個(gè)對(duì)象是被new運(yùn)算符動(dòng)態(tài)創(chuàng)建的,當(dāng)使用delete運(yùn)算符釋放它時(shí),delete將會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。

    6.一個(gè)類的對(duì)象作為另一個(gè)類的數(shù)據(jù)成員

   當(dāng)一個(gè)類中的數(shù)據(jù)成員是某一個(gè)類的對(duì)象時(shí),可稱這種成員是新建類的子對(duì)象或?qū)ο蟪蓡T,則新類的定義格式可表示為

   calss X

   {

   類名1 成員名1;

   類名2 成員名2;

   類名3 成員名3;

   ……………

   類名n 成員名n;

   …。………… //其他成員

   };

   其中,X為新建類的類名,類名1、類名2、……、類名n必須是已定義過(guò)的類。如

   class A {};

   class B

   {

   A a;

   };

   則在創(chuàng)建類B的對(duì)象(調(diào)用類B的構(gòu)造函數(shù))時(shí),會(huì)自動(dòng)調(diào)用類A的構(gòu)造函數(shù)。如果類A的構(gòu)造函數(shù)為有參函數(shù)時(shí),通常采用初始化表的方式來(lái)調(diào)用構(gòu)造函數(shù)。

   新類的構(gòu)造函數(shù)的一般定義格式為

   新類(參數(shù)表0):成員1(參數(shù)表1),成員2(參數(shù)表2),…,成員n(參數(shù)表n)

   {   …………   }

   其中,成員1、成員2、……、成員n是新類中的對(duì)象成員;參數(shù)表1提供初始化成員1所需的參數(shù),參數(shù)表2提供初始化成員2所需的參數(shù),依此類推,并且這幾個(gè)參數(shù)表中的參數(shù)均來(lái)自參數(shù)表0.另外,初始化新類的非對(duì)象成員所需的參數(shù),也由參數(shù)表0提供。

   7.常對(duì)象與常對(duì)象成員

   (1)常對(duì)象

   常對(duì)象是指對(duì)象常量,其定義格式為

   const 類名 對(duì)象名;

   從格式中可以看出,常對(duì)象的定義與一般對(duì)象的定義相比,在類名前必須加const關(guān)鍵字。

   常對(duì)象具有以下特點(diǎn)

   l    常對(duì)象在定義時(shí)必須進(jìn)行初始化,而且在程序中不能再對(duì)其進(jìn)行更新。

   l    通過(guò)常對(duì)象只能調(diào)用類中的常成員函數(shù),而不能調(diào)用類中的其他成員函數(shù)。

   (2)常對(duì)象成員

   常對(duì)象成員分為常成員函數(shù)和常數(shù)據(jù)成員。

   1)常成員函數(shù)

   在類中,使用關(guān)鍵字const說(shuō)明的成員函數(shù)成為常成員函數(shù),常成員函數(shù)的說(shuō)明格式為

   類型 函數(shù)名(形參表) const;

   類中的常成員函數(shù)與普通成員函數(shù)相比,具有以下特點(diǎn)

   l    常成員函數(shù)為類的只讀函數(shù),這種成員函數(shù)可以讀取數(shù)據(jù)成員的值,但不可以更新數(shù)據(jù)成員的值,它也不能調(diào)用該類中沒(méi)有const修飾的其他成員函數(shù)。

   l    常成員函數(shù)定義中的const關(guān)鍵字是函數(shù)類型的一部分,因此在其實(shí)現(xiàn)部分中也要帶上const關(guān)鍵字。

   l    常成員函數(shù)定義中的const關(guān)鍵字可以參與區(qū)分重載函數(shù)。

   例如:

 #include <iostream.h>

class Test_const{
   private:
       int m;
   public:
       Test_const(int arg1) //構(gòu)造函數(shù)
       {
         m=arg1;
       }
       void setvalue(int newvalue);
       void showvalue();
       void showvalue() const; //常成員函數(shù)
};

void Test_const::setvalue(int newvalue)
{
   m=newvalue;
}
void Test_const::showvalue()
{
   cout<<"m="<<m<<endl;
}
void Test_const::showvalue() const //此處的const關(guān)鍵字不可少
{
   cout<<"const example m="<<m<<endl;
}

void main()
{
   Test_const c1(100); //定義對(duì)象c1
   const Test_const c2(100); //定義常對(duì)象c2
   c1.setvalue(200);
   c1.showvalue(); //此處調(diào)用的是函數(shù)void showvalue();
   c2.showvalue();   //此處調(diào)用的是函數(shù)void showvalue() const;
//不能執(zhí)行語(yǔ)句c2.setvalue(200);因?yàn)槌?duì)象c2只能調(diào)用常成員函數(shù)
}

   2)常數(shù)據(jù)成員

   類中定義的數(shù)據(jù)成員,除了可以為一般變量外,還可以為const常量,這種數(shù)據(jù)成員稱為常數(shù)據(jù)成員。

   構(gòu)造函數(shù)可以對(duì)對(duì)象的數(shù)據(jù)成員進(jìn)行初始化,但如果數(shù)據(jù)成員為常量成員或引用成員時(shí),則不能在構(gòu)造函數(shù)中直接用賦值語(yǔ)句為其進(jìn)行賦值。需要利用構(gòu)造函數(shù)所附帶的初始化表進(jìn)行初始化,即在構(gòu)造函數(shù)的括號(hào)后面加上“:”和初始化表,其格式為

   類名::類名(形參表):常數(shù)據(jù)成員名1(值1),常數(shù)據(jù)成員名2(值2),……

   {

   //構(gòu)造函數(shù)的函數(shù)體

   }

   可以看出,當(dāng)有多個(gè)數(shù)據(jù)成員時(shí),初始化表中的初始化項(xiàng)有多個(gè),且需要用逗號(hào)隔開(kāi)。

   8.類作用域

   類作用域又可稱為類域,它是指在類定義中用一對(duì)大括號(hào)開(kāi)括起來(lái)的范圍。

   不同的類的成員函數(shù)可以具有相同的名字,因此,需要用作用域運(yùn)算符“::”來(lái)指明該成員函數(shù)所屬的類。

   在類的成員函數(shù)中可以直接引用類的數(shù)據(jù)成員。但是,如果在成員函數(shù)中定義了同名的局部變量時(shí),則必須用作用域運(yùn)算符“::”來(lái)指定,以免混亂。例如:

 #include <iostream.h>
class Region{
private:
   int x;
   int y;
public:
   Region(int x,int y)
   {
       Region::x=x;
       Region::y=y;
   }
   void print()
   {
       cout<<"x="<<x<<",y="<<y<<endl;
   }
};
void main()
{
   Region region(5,10);
   Region *p;
   p=&region;
   region.print();
   p->print();
}

   如果要從類外訪問(wèn)類的成員,則必須通過(guò)對(duì)象名和圓點(diǎn)成員選擇符“。”或指向?qū)ο蟮闹羔樅图^成員選擇符“->”。如上例中的語(yǔ)句region.print()和語(yǔ)句p->print();是等價(jià)的。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++基礎(chǔ)概念
計(jì)算機(jī)等級(jí)考試二級(jí)C++考點(diǎn)分析之類和對(duì)象
C++語(yǔ)言學(xué)習(xí)筆記(一)
C++ Primer:類設(shè)計(jì)者的工具
重磅干貨:五萬(wàn)字長(zhǎng)文總結(jié):C/C 知識(shí)(上篇)
c++中類的默認(rèn)構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服