日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

4、面向对象

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4、面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1.基本的概念

??? 類,指的是莫一類的事物的概括,是一個抽象的

??? 對象:指的是某一類里面的一個實體,是具體的

類:

??? 通常包含了屬性和行為。屬性:被描述類的靜態的特征,老虎的顏色、體重等靜態的屬性;行為:描述類的動態特征,比如跑

類的繼承:

??? 繼承之后的類,繼承了原先的類的所有的屬性和行為;繼承之后的類,也可以有自己特有的屬性和行為:

????????????????????????????

??? 在類A的基礎上建立一個新類B,類A成為基類或者父類,類B成為派生類或者子類;子類完全繼承父類的所有的成員。

class 子類名字 : 繼承的方式  父類的名字
{
}
繼承的方式:public /private/protected,如果省略的話,系統默認的是 private

2.類的封裝

??? 類的封裝就是將不同的屬性和行為結合在一起,形成一個新的數據類型。

??? 成員變量:表示類的屬性

??? 成員函數:表示類的行為的函數,

分為:共有、私有、保護 三種類型

公有:成員變量和成員函數可以被類內和外界訪問和調用,也就是共有的成員可以通過變量被外接訪問

私有:成員變量和成員函數只能被類的內部訪問和調用,也就是說 私有的成員只能在類的內部使用

?

3.struct 和 class 區別:

??? struct 定義類的時候,所有的成員默認的都是 public

??? class定義類的時候,所有的成員默認的都是私有的

?

4、構造函數

??? 構造函數的作用是完成,類的對象初始化,他的名字和類名完全一致,可以有參數,但是必須沒有任何的返回值

class Test
{
public:Test(int v);  // 構造函數~Test();int getValue();
private:int i;
};Test::Test(int v)  // 構造函數
{i = v;
}
Test::~Test()
{
}
int Test::getValue()
{return i;
}int main(int argc, char **argv)
{Test aa(5);  // 對象的初始化Test bb = 5; // 對象初始化的方式2Test cc = Test(6);  // 主動調用構造函數printf("v = %d\n", aa.getValue());
}


?

類的成員函數實現重載:

C++中函數可以實現函數的重載,構造函數其實也是可以實現重載的功能的:

class A
{
private:int i;
public:A()  // 重載
    {i = 11;}A(int v)  // 重載
    {i = v;}int getvalus(){return i;}
};

顯然,類的對象定義的時候,即使你沒有進行初始化,編譯器還是會自動完成對象的初始化,

構造函數的異類

默認構造函數、拷貝構造函數(完成對象的拷貝的任務)

A aa;  // 調用默認的構造函數,無參

A bb = aa; // 調用拷貝構造函數

當類內自己沒有定義構造函數和拷貝構造函數的時候,編譯器會為你自動添加一個無參的構造函數,其函數體為空。而默認提供的拷貝構造函數,也只是簡單的進行成員變量的值復制。

當類A的對象是類B的成員變量的時候:初試列表的使用

class A
{
private:int i;
public:A(int v){i = v;}
};
class  B
{
public:B() {printf("BB\n");}
private:const int c;  // const 變量必須初始化A a1;   // 對象也是需要進行初始化
    A a2;
};

??? 這個時候,會被報錯,因為A的對象在B做成員的變量,壓根就沒有被初始化,所以在B內部需要給成員變量初始化,初始化列表:

class  B
{
public:B() : c(1), a1(2), a2(3) // 構造函數里面,指定初始化的值,初始化列表
    {printf("BB\n");}
private:const int c;A a1;A a2;
};

??? 也就是說,通過初始化列表,對成員變量進行初始化,并且初始化列表的執行是先于構造函數的函數體執行的;也就是使用初始化列表對構造函數進行成員變量的初始化,

5.析構函數

??? 就是在對象被銷毀之前調用的析構函數(完成一些清理的工作),析構函數沒有參數,也沒有任何的返回值類型

~ 類名()
{
}

??? 當自己沒有寫構造函數或者析構函數的話,編譯器會自動為我們添加構造函數和析構函數。

??? 析構函數當且僅當只有一個。析構執行的調用順序與對應的構造函數調用秩序相反。

轉載于:https://www.cnblogs.com/qxj511/p/5215304.html

總結

以上是生活随笔為你收集整理的4、面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。