成员选择运算符.
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成员函数中才有效。