《面向物件程式設計 C++》指向物件的指標
阿新 • • 發佈:2018-12-21
成員選擇運算子.
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成員函式中才有效。