類與結構體

緣來是你遠去是我發表於2020-11-15

目錄

類與結構體的異同

類的成員函式

成員函式的性質

成員函式的定義

物件成員的引用

通過物件名和成員運算子訪問物件中的成員

通過只想物件的指標訪問物件中的成員

通過物件的引用變數訪問物件中的成員


類與結構體的異同

C++中增加了class型別後,仍保留了結構體型別(struct),而且把他的功能也擴充套件了。C++不是簡單的繼承了C的結構體,而是使它也有了類的特點,以便於用於物件導向程式設計。用struct宣告的結構體型別實際上也就是類型別

struct宣告的類和class宣告的類是有區別的。用struct宣告的類,如果對其成員不做private或public的宣告,系統將預設為public(公用的)。而class定義的類,如果不做private或public宣告,系統將預設其成員為private(私有的),在需要時也可以自己用顯式宣告改變。如果希望成員是公有的,使用struct比較方便,如果希望部分成員是私有的,宜用class。建議儘量使用class來建立類,符合C++程式風格。

如果一個類中沒有成員函式,就等同於C語言中的結構體了,體現不出類在物件導向程式設計中的作用。

類的成員函式

成員函式的性質

類的成員函式可以被指定為private(私有的)、public(公有的)或protected(受保護的)。

私有的成員函式只能被本類中的其他成員函式所呼叫,而不能被類外呼叫。成員函式可以訪問本類中任何成員(包括私有的和公有的),可以引用在本作用於中有效的函式。

一般做法是將需要被外界呼叫的成員函式指定為public,它們是類的對外介面。私有成員函式的作用就是支援其他函式的操作,是類中其他成員的工具函式,類外使用者不能呼叫。

成員函式的定義

成員函式的定義有兩種:類體中定義和類的外面定義。

類體內定義

class Student
{
    public:
        void display()
        {
            cout <<"num::"<<num<<endl;
            cout <<"name:"<<name<<endl;
            cout <<"sex:"<,sex<,endl;
        }
    private:
        int num;
        string name;
        char sex;
};

Student stud1,stud2;

類的外面定義

“::”是作用域限定符或稱為作用域運算子,它宣告的函式就是屬於哪個類的。

class Student
{
    public:
        void display()
        {
            cout <<"num::"<<num<<endl;
            cout <<"name:"<<name<<endl;
            cout <<"sex:"<,sex<,endl;
        }
    private:
        int num;
        string name;
        char sex;
};

    
void Student::display()
{
    cout <<"num::"<<num<<endl;
    cout <<"name:"<<name<<endl;
    cout <<"sex:"<,sex<,endl;
}

Student stud1,stud2;

物件成員的引用

通過物件名和成員運算子訪問物件中的成員

//物件名.成員名
stud1.num;
stud1.display( );

通過只想物件的指標訪問物件中的成員

Student stud1, *p; //定義物件stud1和指向Student類的指標變數p
p = &stud1;        //使p指向物件t

通過物件的引用變數訪問物件中的成員

如果為了物件定義了一個引用變數,它們是共佔同一段儲存單元的,實際上它們是同一個物件,只是用了不同的名字表示而已。因此完全可以通過引用來訪問物件中的成員,其概念和方法與通過物件名來引用物件中的成員是相同的。

Time t1;      //定義物件t1
Time &t2 = t1;//定義Time引用變數t2,並使之初始化為t1

t2與t1共佔用了同一段儲存空間,故t2.hour就是t1.hour。

 

 

 

 

 

相關文章