1. 程式人生 > >C++之類(一)

C++之類(一)

類在C++中十分的重要,所以學習好它顯得十分重要。 

首先,我們要知道類基於面向物件的三大特性:封裝、繼承、多型

那麼,什麼是類和物件呢?

類:像是一種自定義型別,如C中的struct,是對一件事物的抽象,具體的描述事物的屬性和功能。不佔用記憶體

物件:是類的例項化, 是具體的,佔用記憶體

以下介紹的是類其中的一個特性------封裝。

封裝:就是類+限定符。在類的限定符有三個-----public(公有),protected(保護),private(私有),若未說明,預設類中的成員是private的。而只有public中的成員可以被類外所訪問,protected和private中的成員不可以。因為C++要相容C,所以由上可知struct中的成員是public的。

類的成員的有兩種----成員變數(物件的屬性),成員函式(物件的方法)。與C中struct種不同,class中既可以定義變數,也可以定義函式。這就體現了類的快捷。

那麼,一個類中要是既有成員變數,又有成員函式怎麼計算一個類的物件的大小?我們知道變數的大小可以求出,而函式的大小好像並沒有這個說法,所以規定類的大小----只算成員變數的大小(依據記憶體對其)。那麼,一個空類或者一個沒有成員變數的類的大小,規定其大小為一個位元組

在類中有2十分個重要的東西:this指標和預設成員函式。

  • this指標:瞭解this指標,我們看一下在日期類中,在每個成員函式中,都有一個指標,它是隱藏著的,稱為this指標,它指向當前物件,也就是當前物件的首地址,通過this指標,你可以訪問到當前物件的成員變數和成員函式(除了在類中有static修飾的函式外
    )。這在之後會講在類中用static修飾的函式和變數意味著什麼。

                 那麼,什麼是當前物件?在下面中的例子中,解釋了當前物件就是,你再哪個物件中呼叫了類中的函式,函式中的                this指標就是那個物件。下例中,在d1中呼叫了>函式,所以this指標中的內容就是d1中的內容。

                 我們還需要關於this指標的幾個重點:1.this是常量指標,故它的值不能被修改。2.this指標只能在成員函式中才能使                用。3.被static修飾的成員函式不能使用this指標。

  • class Date
    {
    public:
    	void SetDate(int year, int month, int day)
    	{
    		_year = year;
    		_month = month;
    		_day = day;
    	}
    	bool operator>(const Date& d)
    	{
    		if (this->_year > d._year ||
    			(this->_year == d._year&&this->_month > d._month) ||
    			(this->_year == d._year&&this->_month == d._month&&this->_day > d._day))
    			return true;
    		else
    			return false;
    	}
    
    private:
    	int _year;
    	int _month;
    	int _day;
    };
    
    int main()
    {
    	Date d1, d2;
    	d1.SetDate(1900, 1, 1);
    	d2.SetDate(2018, 11, 8);
    	if (d1 > d2)
    		cout << "d1>d2" << endl;
    	else
    		cout << "d1<d2" << endl;
    	system("pause");
    	return 0;
    }

    預設成員函式: