91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CPP較難理解的幾個部分是什么

發布時間:2022-01-04 18:23:18 來源:億速云 閱讀:132 作者:柒染 欄目:大數據

今天就跟大家聊聊有關CPP較難理解的幾個部分是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

繼承:

分為公有繼承,私有繼承,保護繼承。

1.公有繼承(public)

特點是基類的公有成員和保護成員作為派生類成員時保持原狀,而基類的私有成員仍然私有,無法被派生類的子類訪問。

如:

class room

{

public:

int a1 = 50;

private:

int b1 = 70;

};

class bed : public room

{

public:

int c1 = a1;

        int c2 = b1;//報錯

};

2.私有繼承(private)

私有繼承的特點是,基類的公有成員和保護成員都作為派生類的私有成員,并且不能被這個派生類的子類訪問。基類的私有成員依然不可訪問

如:

class desk : private room

{

public:

int f = a1;//正確

        int g = b1;//錯誤,基類的私有成員依然不可訪問

};

class chair : public desk

{

public:

int c = a1;//報錯 不可訪問,故不能被派生類的子類訪問

};

3.保護繼承(protected):

保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,并且只能被它的派生類成員、友元訪問。基類的私有成員仍然是私有的。

這里介紹一下友元:

友元函數:friend <類型><友元函數名>(<參數表>); 

友元類: friend class <友元類名>;  

友元無繼承性。

多態:這是C++面向對象的核心概念,主要通過虛函數 virtual 實現,虛函數允許子類重新定義成員函數中的父類虛函數(見下面虛函數那個例子),這稱為覆蓋或者重寫(注意不叫重載)。

重載:重載是多個函數重名,但參數名稱或者類型一種(兩種)不同,編譯器根據這些參數自動生成一些不同名的預處理函數。

多態和重載的實質區別在于函數地址是否在運行前確定。由于重載需要編譯器生成一些不同名的預處理函數,所以它是在運行后才能確定函數地址。

虛函數:即virtual,沒有虛函數也就沒有多態,可見其重要性。虛函數使得父類對象的指針可以調用子類的函數。如果不是虛函數,父類是不能調用子類的。C++中多態的實現只在通過基類指針調用虛函數時才會實現。

class animal
{
       virtual  void breathe() //注意這是慮函數
       {
              cout<<"animal breathe"<<endl;
       }
};

class fish:public animal
{
void breathe()
{
     cout<<"fish bubble"<<endl;
}
};

class cat:public animal
{
void breathe()
{
     cout<<"cat bubble"<<endl;
}
};


void main()
{
animal* pAn;
switch(用戶選擇)
{
case fish:
pAn = new fish;
break;
case cat:
pAn = new cat;
break;
}
pAn->breathe();
delete pAn;
}
}

當用戶選魚時輸出:fish breathe
當用戶選貓時輸出:cat breathe
如果沒有使用虛函數的話(將基類的breathe函數virtual申明除掉),即沒有利用C++多態性,則利用基類指針調用相應的函數的時候,將總被限制在基類函數本身,而無法調用到子類中被重寫過的函數。那么不管你怎么選都是輸出:animal breathe.


構造函數:初始化對象的數據成員。

如:

class room

{

public:

room(int _a)//構造函數

    {

        b1 = _a;//初始化對象的數據成員

    }

private:

int b1;

};

可以簡寫成 room(int _a):b1(_a){}

 例如:room c1(22); 編譯系統為對象c1的數據成員(b1)分配內存空間,并調用構造函數room()自動地初始化對象c1的b1值設置為22.

析構函數:與構造函數剛好相反,析構函數是在對象被撤銷時被自動調用,用于對成員撤銷時的一些清理工作。

特點:

1.析構函數名與類名的差別只在一個~,即在類名前加個波浪線。

2.析構函數只能有一個,沒有返回類型, 也不能指定參數,不能被重載

3.析構函數可以隨時被調用,用于釋放對象的動態內存

如前面的:

class room

{

public:

room(int _a):b1(_a){}

        ~room(){}

}

const 修飾指針:

如果const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;

如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。

看完上述內容,你們對CPP較難理解的幾個部分是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

cpp
AI

定兴县| 类乌齐县| 开江县| 苏尼特左旗| 乌兰察布市| 张家界市| 巴彦淖尔市| 铁力市| 安平县| 习水县| 丰镇市| 朝阳市| 西林县| 阿尔山市| 蓬溪县| 天水市| 潍坊市| 綦江县| 社会| 吕梁市| 扬州市| 石首市| 石狮市| 韶山市| 从化市| 镇平县| 石台县| 南皮县| 白河县| 广南县| 大冶市| 睢宁县| 加查县| 封开县| 顺义区| 峨眉山市| 婺源县| 饶河县| 江安县| 乌拉特前旗| 伽师县|