c++類的聲明和對象的定義---10


原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/

 

類是創建對象的模板,一個類可以創建多個對象,每個對象都是類類型的一個變量;創建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數。與結構體一樣,類只是一種復雜數據類型的聲明,不占用內存空間。而對象是類這種數據類型的一個變量,占用內存空間。

類的聲明

類是用戶自定義的類型,如果程序中要用到類,必須先進行聲明,或者使用已存在的類(別人寫好的類、標准庫中的類等),C++語法本身並不提供現成的類的名稱、結構和內容。

一個簡單的類的定義:

    class Student{
    //成員變量
    char *name;
    int age;
    float score;
    //成員函數
    void say(){
    printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
    }
    };

 

該例創建了一個Student類,它包含了3個成員變量和1個成員函數。

class是C++中的關鍵字,用於聲明一個類;緊接 class 關鍵字之后的是我們自定義的類名 Student;由{ }包圍的是類體。聲明類時不能對成員變量進行初始化,只有在創建對象以后才能賦值。

類可以理解為一種新的數據類型,該數據類型的名稱是 Student。與 char、int、float 等基本數據類型不同的是,Student 是一種復雜數據類型,可以包含基本類型,而且多了很多基本類型中沒有的特性。

需要注意的是:在類聲明的最后有一個分號(;),它是類聲明的一部分,表示類聲明結束了,不能省略。

創建對象

聲明了 Student 數據類型之后,就可以用它來定義變量了,如

Student LiLei; //創建對象

該語句聲明了一個名字為 LiLei、數據類型為 Student 的變量。這和:

int a; //定義整形變量

語句定義了一個整型變量表達的意思是類似的。而 LiLei 這個變量我們稱之為 Student 類的對象。

在定義類的對象時,class 關鍵字可要可不要。但出於習慣我們通常都會省略掉class關鍵字,例如:

    class Student LiLei; //正確
    Student LiLei; //同樣正確

創建類的對象時,除了能定義單個變量以外,還可以定義一個數組或者指針。例如:

    Student all_student[100];
    Student *pointer;

第一條語句定義了一個 all_student 數組,該數據擁有100個元素,每個元素都是 Student 類型。第二條語句定義了一個 Student 類型的指針 pointer,該指針可以指向 Student 類型的變量(對象),用法和普通指針一樣。

聲明類的同時創建對象

和結構體(struct)類似,你可以先聲明類,然后再創建對象,也可以在聲明類的同時創建對象。如下所示:

    class Student{
    //成員變量
    char *name;
    int age;
    float score;
    //成員函數
    void say(){
    printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
    }
    }stu1, stu2;

這個時候你也可以省略類名,直接創建對象。如下所示:

    class{
    //成員變量
    char *name;
    int age;
    float score;
    //成員函數
    void say(){
    printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
    }
    }stu1, stu2;

直接定義對象,在C++中是合法的、允許的,但卻很少用,也不提倡用。

一個完整的示例:

    #include <stdio.h>
    //類可以在所有函數之外定義
    class Student{
    public: //類包含的變量
    char *name;
    int age;
    float score;
    public: //類包含的函數
    void say(){
    printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
    }
    };
    int main(){
    //創建對象
    Student stu;
    stu.name = "小明";
    stu.age = 15;
    stu.score = 92.5f;
    stu.say();
    //定義指針
    Student *pt_stu = &stu;
    pt_stu->name = "李雷";
    pt_stu->age = 16;
    pt_stu->score = 80;
    pt_stu->say();
    return 0;
    }

運行結果:
小明的年齡是 15,成績是 92.500000
李雷的年齡是 16,成績是 80.000000

public 是C++中的關鍵字,用來修飾成員變量和成員函數,表示它們是公有的。我們將在下節詳細講解 public,這里只需要知道,只有 public 后面的成員變量和成員函數才能被創建的對象訪問到。像本節開頭的例子,沒有使用 public,那么創建對象后就不能使用任何成員。

main 函數中首先創建了一個對象 stu,然后又定義了一個 Student 類型的指針變量。可以發現,和結構體(struct)類似,一個對象通過成員選擇符”.“來訪問成員變量和成員函數,而指針變量通過指針操作符”->“來訪問成員。

下面在附上一段代碼:

 

#include <iostream>
#include <string>
using namespace std;

class _test_class_
{
private:
    string school = "Henan University of Science and Technology";
public:
    string name;
    char age;

    template <typename _TYPE_DEFINE>
    _TYPE_DEFINE Test_function(const _TYPE_DEFINE &a,const _TYPE_DEFINE &b)
    {
        return a+b;
    }
    void Display(string name,int age)
    {
        cout <<"school :"<<school<<endl;
        cout <<"name :"<<name<<endl;
        cout <<"age  :"<<age<<endl;
    }
};

int main(int argc,const char* argv)
{
    class _test_class_ class1,class2;
    class1.name = "student1";
    class1.age  = 22;

    class2.name = "student2";
    class2.age  = 33;

    _test_class_*p;
    p = &class1;
    cout << "p-> "<< p->name<<endl;
    class1.Display(class1.name,class1.age);
    class2.Display(class2.name,class2.age);


    return 0;
}


對象指針和結構體指針類似,不理解的同學請重溫《C和指針》。

注意:對象指針指向的是一個具體的對象,而不是類。下面的寫法是錯誤的:

    Student *pt;
    pt = &Student;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM