每个常规的方法调用都会传递调用该方法的对象的一个指针,将其作为“隐藏”的第一个参数,名this。可以使用这个指针来访问数据成员或调用方法,还可以将其传递给其他方法或函数。有时这个指针还有助于消除名字的歧义。例如,可能如下定义了SpreadsheetCell类,使得setValue()方法取一个名为mValue的参数(而不是inValue)。在这种情况下,setValue()可能如下所示:
void SpreadsheetCell::setValue(double mValue){
mValue = mValue;
mString = doubleToString(mValue);
}
第一行代码就很让人摸不着头脑。你指的是到底是哪一个mValue,是作为参数传递的mValue,还是作为对象成员的mValue?为了消除名字的这种歧义,可以使用this指针:
void SpreadsheetCell::setValue(double mValue){
this->mValue = mValue;
mString = doubleToString(this->mValue);
}
还可以使用this指针从对象的一个方法中调用一个取对象指针作为参数的函数或方法,例如,假设编写了一个独立的函数(而非类中的方法)printCell(),如下所示:
void printCell(SpreadsheetCell* inCellp){
cout
}
如果想从setValue()方法调用printCell(),必须将this作为参数传递,从而向printCell()提供一个SpreadsheetCell()对象(即调用setValue()的对象,setValue()就在此对象上操作)的指针:
void SpreadsheetCell::setValue(double mValue){
this->mValue = mValue;
mString = doubleToString(this->mValue);
printCell(this);
}
文章评论(0条评论)
登录后参与讨论