我们都知道,类的成员函数有一个附加的隐形形参,即指向该类对象的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