我们都知道,类的成员函数有一个附加的隐形形参,即指向该类对象的this指针,它与调用成员函数的对象绑定在一起。那么,这个this指针究竟是什么样的指针呢?其解引用*this返回的又是怎样的一个对象呢?
首先,我们以《C++ Primer》书中的Screen类为例说明,这个类只是简单声明,有些成员函数的具体实现没有定义。不必关注成员函数的实现,只需要看它的形式即可。
//定义一个名为Screen的类型来表示计算机上的窗口 #include <iostream> #include <string> using namespace std; class Screen { public: //使用类型别名来简化类 typedef string::size_type index; //构造函数 Screen(index hght,index wdth,const string &cntnts=""): height(hght),width(wdth),cursor(0),contents(cntnts){} //返回光标的位置 index get_cursor() const{return cursor;}; //增加三个成员函数,返回*this Screen& move(index r,index c);//给定两个index值,将光标移至新位置 Screen& set(char);//将特定字符设置为特定值 const Screen& display(ostream &os) const;//输出内容 private: std::string contents;//窗口内容 index cursor;//光标当前停留的位置 index height,width;//窗口的高度和宽度 }; //给定两个index值,将光标移至新位置 Screen& Screen::move(index r,index c) { index row=r*width; cursor=row+c; return *this; } //将特定字符或光标指向的字符设置为特定值 Screen& Screen::set(char c) { contents[cursor]=c; return *this; } //输出内容 const Screen& Screen::display(ostream &os) const { os<<contents; return *this; } int main() { //根据屏幕的高度、宽度和内容的值来创建Screen Screen myscreen(5,6,"abcde\nfghij\nklmno\pqrst\nuvwxy"); myscreen.move(4,0).set('#').display(cout); cout<<endl; return 0; }
- const指针——指针本身的值不可修改,只能指向指定位置的对象
其定义如下:
int errNumb = 0;
int *const curErr=&errNumb;//curErr是一个指向int型对象的const指针
可以改变const指针所指向的值,但不能改变const指针所保存的地址,如下:
*curErr=1;//curErr所指向的值变为1,即errNumb=1
++curErr;//错误,curErr是一个常量,不能改变
const指针在定义时必须初始化,一经初始化,则指针本身不可再修改,只能指向初始化时的对象。- 指向const对象的指针——只能读取对象,不能利用指针修改对象
其定义如下:
const double pi = 3.14;
const double *cptr = π//cptr是一个指向const对象pi的指针- 常(const)成员函数
在形参表后用const修饰的成员函数,表示只能读取类的数据成员,不能修改。如上例中的index get_cursor()const{return cursor;};- 常(const)对象
在定义类对象时用const修饰的对象,常对象只能调用类中的常成员函数,而普通的对象则没有此限制。如下例:
const Screen herscreen();//herscreen就是一个Screen类型的常对象
<span style="color:#ff0000;">Screen&</span> move(index r,index c) { index row=r*width; cursor=row+c; <span style="color:#ff0000;">return *this;</span> }
<span style="color:#ff0000;">const Screen&</span> display(ostream &os) <span style="color:#ff0000;">const</span> { os<<contents; <span style="color:#ff0000;">return *this;</span> }注意:
原文地址:http://blog.csdn.net/flyingbird_sxf/article/details/42062423