[C++之旅] 7 C++類和物件

weixin_34402408發表於2018-11-24

[C++之旅] 7 C++類和物件

類和物件

:相當於一個種類,以狗狗為例,狗就是一個類,狗這個類裡包含無數種不同種類的狗狗;每個狗狗都有自己的種類名(如哈士奇、秋田犬等等)、名字、年齡、叫聲等,種類、名字、年齡為狗的屬性,也就是狗這個類的資料成員,叫聲為狗狗的技能,也就是狗這個類的成員函式。

成員:具體指向某個事物,相當於狗這個類中的哈士奇,他的名字叫旺財、年齡1歲等等

class Dog           //dog為類名
{
    char type;      //資料型別
    char name[20];
    int age;
    
    void speak();   //成員函式
}

訪問限定符:在類中不是把狗狗的所有屬性或技能描述出來,比如狗狗鬍鬚的長短等等,但狗狗的鬍鬚長度又是描述狗狗的一個特徵,因此就需要訪問限定符,將人們關心狗狗的特徵顯示出來,不關心的部分隱藏起來;訪問限定符有三個:public公共的、protected受保護的、private私有的;

以狗狗為例程式如下

class Dog
{
public:             //公共的成員
    char type;
    char name[20];
    int age;
    
    void speak();
private:            //私有的成員
    int beard;
}

物件的例項化

例項化物件就好比在狗這個種類中生成一條或多條你自己的狗狗。在C++中例項化有兩種方式:從棧中例項化、從堆中例項化

  • 從棧中例項化物件

以上面狗狗的類為例,現在例項化一個狗狗的物件。

int main(void)
{
    Drog doge;          //例項化一個物件
    Drog doges[10];    //例項化一個物件陣列
        
    return 0;
}
  • 從堆中例項化
int main(void)
{
    Drog *doge = new Drog();    //例項化一個物件
    Drog *doges = new Drog[10];//例項化一個物件陣列
    
    delete doge;
    delete []doges;
        
    return 0;
}

從堆中例項化一個物件與棧中略有不同,棧中例項化的物件使用完後系統會自動釋放掉物件的記憶體,在堆中例項化系統不會自動釋放,因此程式末尾需手動釋放記憶體。

物件成員的訪問

訪問物件成員就好比是檢視和修改你生成的一隻或多隻狗狗的屬性和技能。從棧和堆中例項化的物件訪問方法不同。

訪問從棧例項化物件的成員
int main(void)
{
    Drog doge;          //例項化一個物件
    Drog doges[10];    //例項化一個物件陣列
    
    doge.age = 2;       //訪問成員資料
    doge.speak();       //訪問成員函式
    
    doges[5].age = 2;   //訪問陣列第六個成員資料
    doges[5].speak();   //訪問陣列第六個成員函式
    
    return 0;
}
訪問從堆例項化物件的成員
int main(void)
{
    Drog *doge = new Drog();    //例項化一個物件
    Drog *doges = new Drog[10];//例項化一個物件陣列
    
    doge->age = 2;      //訪問成員資料
    doge->speak();      //訪問成員函式
    
    doges[5]->age = 2;  //訪問陣列第六個成員資料
    doges[5]->speak();  //訪問陣列第六個成員函式
    
    delete doge;
    delete []doges;
        
    return 0;
}

相關文章