C++語言基礎(3)-類和對象

來源:互聯網
上載者:User

標籤:記憶體   它的   無法   簡單的   pre   分配   使用   字母   賦值   

類是建立對象的模板,一個類可以建立多個對象,每個對象都是類類型的一個變數;建立對象的過程也叫類的執行個體化。每個對象都是類的一個具體執行個體(Instance),擁有類的成員變數和成員函數。

一.類的定義

一個簡單的類的定義:

class Student{public:    //成員變數    char *name;    int age;    float score;    //成員函數    void say(){        cout<<name<<"的年齡是"<<age<<",成績是"<<score<<endl;    }};

class是 C++ 中新增的關鍵字,專門用來定義類。Student是類的名稱;類名的首字母一般大寫,以和其他的標識符區分開。{ }內部是類所包含的成員變數和成員函數,它們統稱為類的成員(Member);由{ }包圍起來的部分有時也稱為類體,和函數體的概念類似。

注意:在類定義的最後有一個分號;,它是類定義的一部分,表示類定義結束了,不能省略。

類只是一個模板(Template),編譯後不佔用記憶體空間,所以在定義類時不能對成員變數進行初始化,因為沒有地方儲存資料。只有在建立對象以後才會給成員變數分配記憶體,這個時候就可以賦值了。

二.建立對象並訪問類的成員

建立對象的方式如下:

#include <iostream>using namespace std;//類通常定義在函數外面class Student{public:    //類包含的變數    char *name;    int age;    float score;    //類包含的函數    void say(){        cout<<name<<"的年齡是"<<age<<",成績是"<<score<<endl;    }};int main(){    //建立對象    Student stu;    stu.name = "小明";    stu.age = 15;    stu.score = 92.5f;    stu.say();    return 0;}

運行結果:
小明的年齡是15,成績是92.5

stu 是一個對象,佔用記憶體空間,因此可以對它的成員變數賦值,也可以讀取它的成員變數。類通常定義在函數外面,當然也可以定義在函數內部,不過很少這樣使用。

三.使用對象指標

C語言中經典的指標在 C++ 中仍然廣泛使用,尤其是指向對象的指標,沒有它就不能實現某些功能。

上面代碼中建立的對象 stu 在棧上分配記憶體,需要使用&擷取它的地址,例如:

Student stu;Student *pStu = &stu;

 pStu 是一個指標,它指向 Student 類型的資料,也就是通過 Student 建立出來的對象。

同樣,也可以在堆區建立對象,此時就要用到new關鍵字:

Student *pStu = new Student;

如:

#include <iostream>using namespace std;class Student {public:    char *name;    int age;    float score;    void say() {       cout << name << ",age is " << age << ",score is " << score << endl;    }};int main(){//    Student stu;//    stu.name = "JACK";//    stu.age = 15;//    stu.score = 92.5f;//    stu.say();//    Student stu;                // 在棧區建立對象//    Student *pStu = &stu;    Student *pStu = new Student;  // 在堆區建立對象    pStu ->name = "Jack";    pStu -> age = 10;    pStu -> score = 92.5f;    pStu -> say();    delete pStu;                  // 刪除對象    return 0;}

注意:在棧上建立出來的對象都有一個名字,比如 stu,因此使用指標指向它不是必須的。但是通過 new 建立出來的對象就不一樣了,它在堆上分配記憶體,沒有名字,只能得到一個指向它的指標,所以必須使用一個指標變數來接收這個指標,否則以後再也無法找到這個對象了,更沒有辦法使用它。

也就是說,使用 new 在堆上建立出來的對象是匿名的,沒法直接使用,必須要用一個指標指向它,再藉助指標來訪問它的成員變數或成員函數。

棧記憶體是程式自動管理的,不能使用 delete 刪除在棧上建立的對象;堆記憶體由程式員管理,對象使用完畢後可以通過 delete 刪除。在實際開發中,new 和 delete 往往成對出現,以保證及時刪除不再使用的對象,防止無用記憶體堆積。

C++語言基礎(3)-類和對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.