1. 程式人生 > >《面向物件程式設計 C++》指向物件的指標

《面向物件程式設計 C++》指向物件的指標

成員選擇運算子.

class C{
public:
	void m(){ /*...*/ }
};
void f( C& );
int main(){
	C c1;
	c1.m(); // object
	f(c1);
}
void f( C& c){
	c.m(); //object reference
}

本例展示了物件c1和物件引用c使用成員選擇操作符的語法,成員選擇運算子只能用於物件物件引用。而要通過指標來訪問成員,必須使用指標操作符->

指標操作符->

class C
{
public:
    void m(){ /*...*/}
};
void f(C*); int main() { C c1; c1.m(); //object f( &c1 ); //address of object return 0; } void f(C* p) { p->m(); // pointer to C object }

在本例中,將一個指向物件c1的指標傳遞給函式f,而不是傳遞其引用。所以在f中,指標p對m的訪問用指標操作符->,由於f得到的是一個指向c1的指標而不是c1的引用,所以指標不能用成員選擇符來呼叫m.

在C++中,指向物件的指標主要用於兩個方面:

  • 1 指向物件的指標可以作為引數傳遞給函式,或通過函式返回
  • 2 使用操作符new和new[]動態建立物件,然後返回一個指向該物件的指標。

總結

  • 成員選擇操作符.專門用於物件和物件引用
  • 指標操作符->專用於物件指標

常量指標this

在成員函式內部可以用指標常量this來訪問與成員函式的呼叫相關聯的物件(this是一個關鍵字)。

class C
{
public:
    C() { x=0; }
private:
    int x;
};
int main()
{
	C c1;
}

本例中,建構函式將私有資料成員x初始化為0,用this可以這麼改:

class C
{
public:
C() { this->x=0; } private: int x; }; int main() { C c1; }

this指向物件c1,即this的值為&c1.

this指標還可以這麼用,類的公有成員函式經常會訪問私有資料成員,如:

class C
{
public:
    C() { id=0; }
    void set(const int& ID) { id = ID;}
private:
    int id;
};

本例中,用大寫字母ID作為引數,來避免與成員變數名id發生衝突,而如果就想用id作為引數,這時可以使用this指向成員變數id:

class C
{
public:
    C() { id=0; }
    void set(const int& id) { this -> id = id;}
private:
    int id;
};

this指標是一個常量,它不能作為賦值、遞增、遞減等運算的目標物件,並且,this只在非static成員函式中才有效。