1. 程式人生 > >C++類和物件

C++類和物件

1.類和物件

定義一個類:

class A

{

private:

int x, y, z;

void fun1(){};

public:

int a,b,c;

void fun2(){};

};

C++的限定符:public(公共)、private(私有、預設屬性)、protected(保護)。

物件例項化

A a;

或者A a(……);

不傳參是不能用括號,傳參時有括號,裡面放參數。

例項化後可以通過a.a,a.b,a.c,a.fun2等呼叫公共屬性的變數或函式,但是不能呼叫私有屬性的變數或者函式。

例項化後成員變數按照記憶體對齊原則,但是成員函式缺不佔空間。

若例項化一個空的類,則物件大小為1,負責佔位,表示這個物件已經例項化。

2.四個預設成員函式

C++的類中,有六個預設成員函式:建構函式、拷貝建構函式、解構函式、賦值運算子過載函式、取地址操作符過載函式、const修飾的去地址操作符的過載函式。預設函式在類中沒有定義的時候會自動生成,預設是公有的,但是如果在類中定義了,就不會自動生成了。

我們今天來討論前四個:

先定義一個類

class Date

{

private:

int _date;

int _month;

int _year;

}

①建構函式

建構函式是在物件例項化時需要呼叫的函式。

建構函式無返回值,與類名同名。

預設建構函式是無參的:

Date(){}

可以自定義一個建構函式:

Date(int year  = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

這時,可以通過

Date d1;

Date d2(2017, 10, 07);

都能使物件例項化。

預設的建構函式只能有一個(包括無參、全預設和半預設)

拷貝建構函式

在例項化時可以:

Date d1(2017, 10, 07);

Date d2(d2);//通過拷貝解構函式

預設的拷貝建構函式:

Date(const Date& d)

{

this->_year = d._year;

this->_month = d._month;

this->_day = d._day;

}

在有動態開闢的傳指標時,不能用預設的拷貝建構函式。

③解構函式

解構函式用於清理物件。

~Date(){}

解構函式無參,不能過載。

在物件生命週期結束的時候會自動呼叫。

如果在程式裡,類中打開了文件或者用了動態開闢,則需要手動寫解構函式。

賦值運算子過載函式

Date& operator = (const Date& d)

{
if(this != &d)

{

_year = d._year;

_month = d._month;

_day = d._day;

}

return *this;

}

在例項化後可以

d1 = d2;

不能過載的運算子有:.*】【::】【?:】【sizeof】【.】

3.隱含的this指標

在成員函式中對成員變數的引用,是按照this的指向找到物件的成員變數的,實現對資料成員的操作,簡單來說,在成員函式中,成員變數前都隱含著“this->”。

在運算子過載時,如:

Date& operator = (const Date& d)

{
if(this != &d)

{

_year = d._year;

_month = d._month;

_day = d._day;

}

return *this;

}

this指標指的就是呼叫時的成員的指標,呼叫時d1 = d2,會轉化成d1.operator =(d2),則this指標則是指d1。

而在if語句內,等號左邊的_year、_month、_day前都隱含著this->。