C++入門(7):對象

C++入門(7):對象

類 = 屬性 + 方法;
類名的第一個字母一般採用大寫,類聲明的末尾必須加上分號“;”;C++允許在類裏聲明常量,但不允許對它賦值,除非創建一個靜態常量。

構造器
1)構造器的名字和它所在類的名字一樣;
2)系統會在創建出某個新實例之後,立刻自動調用這個類的構造器;
3)構造器永遠不返回任何值。
如果沒有在類裏定義一個構造器,編譯器會自動創建一個,形式爲:ClassName::ClassName(){},還會創建一個副本構造器。
構造器經常需要重載,即同一個類可以有多個構造器定義,它們名字一樣,只是在輸入參數的個數和類型上有差異。

析構器
在銷燬一個對象時,系統會自動調用類的另一個特殊方法:析構器;
析構函數名也是類名,只是函數名前多了一個波浪符(~);
析構器永遠不返回任何值且不帶輸入參數,聲明只有一種形式:~ClassName()。

this 指針
在類裏, this 指針代表當前對象,其基本用途是避免二義性(尤其在引用變量和屬性的時候)。

下面通過舉例及講解來認識C++中對象的相關知識:

#include <iostream>

class Student{
    public:
        static const bool flag = true ;    //靜態常量,這樣是可以的!
        char sex;
        std::string yourName;

        Student(char s);                   //構造函數,輸入參數有默認值時爲默認構造器,參數可選,一般來說,每個類至少應該有一個默認構造器
        ~Student();                        //析構函數

        void print(std::string name);      //給類添加方法:1)先在類的聲明裏創建一個方法的原型;2)方法的定義(實現)通常在類聲明的後面 。
        void inputName() ;
};

//如果在類聲明裏聲明和定義函數,其效果等同於在請求編譯器把每個函數當做一個內聯函數來對待。

Student::Student(char s)                    //如果構造器聲明改爲:student(char sex);則爲避免二義性,構造器定義中的賦值應改爲:this.sex = sex;
{
    std::cout << "I am a Constructor." << std::endl;
    sex = s;
}

Student::~Student()
{
    std::cout << "I am a Destructor." << std::endl;
}

void Student::print(std::string name)       //定義類的方法的函數體時,必須指明該方法屬於哪個類 :ClassName::functionName
{
    std::cout << "Nice to meet you, " << name << std::endl;
    std::cout << "You are " << sex << std::endl;
}
void Student::inputName()
{
    std::cout << "Honey, what's your name? " << std::endl;
    if(flag)
    {
        std::cin >> yourName;
        if(std::cin.good())
        {
            print(yourName);                //類中方法可以相互調用
        }
        else
        {
            std::cout << "See you next time." << std::endl;
        }
    }
}

int main(int argc, char** argv) {

    Student student1('F');                  //創建類的實例,即對象;由於它的構造函數有參數,所以實例化時需要傳入參數
    student1.inputName();                   //調用類的方法

    Student student2 = student1;            //把一個對象賦值給另一個同類的對象將使同名的屬性有同樣的值
    std::cout << "student2's sex is " << student2.sex << std::endl;   //程序結束之後,需要調用兩次析構器

    return 0;
}

運行結果爲:

I am a Constructor.
Honey, what's your name?
xiuxiu
Nice to meet you, xiuxiu
You are F
student2's sex is F
I am a Destructor.
I am a Destructor.

C++入門(6):複雜的數據類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章