友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
C语言实例教程(PDF格式)-第6部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
明,this指针是一个常指针,程序中可能通过this指针来修改类
中的成员的值,但不可以修改this指针本身的值,也就是说,不
可以对this指针重新赋值,以使它指向另一个对象。
假设我们在类MyClass定义了另一个成员函数geti,如下面的代码
所示:
int geti() const
{
return i;
…………………………………………………………Page 55……………………………………………………………
}
在上面的代码中,const关键字表明函数geti不会修改调用该成员
函数的实例对象中的成员的值。对于编译器而言,上面的成员函
数geti是这样的:
int geti() const
{
return this…》i;
}
由于使用了const关键字,则this指针的类型为const MyClass*
const,这表明不但不能修改this指针本身,也不能通过this指针
修改对象中的成员。举一个例子,如果我们按如下方式定义seti
函数:
void seti(int newi) const
{
i=newi;
}
上面的代码将会导致编译错误 “l…value specifies const
object”。
一般情况下我们不需要显式地使用this指针。下面的代码显示了
this指针的一个典型应用:
#include
#include
#include
class MyPosition;
class MyScreen
{
public:
void PrintMyPosition(MyPosition* pMyPosition);
…………………………………………………………Page 56……………………………………………………………
};
class MyPosition
{
public:
int x;y;
void DisplayMyPosition(MyScreen* pMyScreen);
};
void MyScreen::PrintMyPosition(MyPosition* pMyPosition)
{
HANDLE hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwCursorPosition={0; 24};
char sz'80';
sprintf(sz; 〃My position is (%d;%d)。〃; pMyPosition…》x; pMyPosition…》y);
DWORD cWritten;
WriteConsoleOutputCharacter(hConsoleOutput; sz; lstrlen(sz);
dwCursorPosition; &cWritten);
dwCursorPosition。X=pMyPosition…》x;
dwCursorPosition。Y=pMyPosition…》y;
SetConsoleCursorPosition(hConsoleOutput;dwCursorPosition);
}
void MyPosition::DisplayMyPosition(MyScreen* pMyScreen)
{
pMyScreen…》PrintMyPosition(this);
}
void main()
{
…………………………………………………………Page 57……………………………………………………………
MyPosition mypos;
MyScreen mysrn;
coutx》》y;
mypos。x=x;
mypos。y=y;
mypos。DisplayMyPosition(&mysrn);
}
请注意类MyPosition的DisplayMyPosition成员函数,它使用一个
指向MyScreen对象的指针作为参数。在DisplayMyPosition成员函
数的实现中,调用了MyScreen对象的PrintMyPosition成员函数,
PrintMyPosition成员函数需要一个指向MyPosition对象的指针作
为其参数,这里,我们希望将指向调用DisplayMyPosition成员函
数的对象本身的指针作为参数进行传递,这时就必须使用this指
针。将指向对象自身的指针作为参数传递给其它函数,在实际编
程中是一个很常用的技巧,在这些场合,this指针得到了广泛的
运用,在以后编程的过程中,我们会经常看到这样的用法。
除了示范this指针的用法以外,上面的代码还示范了如何在控制
台窗口中定位输出字符串的位置。运行上面的程序,它首先要求
用户输入一个坐标值,然后,在屏幕的最底行 (这里假定用户使用
80' 25的控制台窗口大小),最后,将下一次显示输出的位置定
位于用户所输入的坐标值所指定的点。整个程序运行的结果如图
所示。
…………………………………………………………Page 58……………………………………………………………
图2。3 在控制台窗口中进行定位
° 注意:
° 上面的程序代码不能在MS…DOS环境下进行编译和链接,因为
我们在程序中显式的调用了Win32控制台API函数 (如
SetConsoleCursorPosition和WriteConsoleOutputCharacter
等),它们属于Win32应用程序接口的一部分。为了使用这些
函数,我们在程序的最开始包含了头文件windows。h。因此,
上面的程序尽管具有和普通的MS…DOS环境下的C/C++程序代码
相一致的结构,但它是一个Windows应用程序,只能运行于32
位Windows环境。我们可以从上面的函数中看出Win32控制台
应用程序和传统的MS…DOS字符模式应用程序之间的本质 区
别。
2。2。3 静态成员
前面说过,无论是类中的成员变量还是成员函数,都可以声明为
静态的。类的静态成员在工作起来和非静态成员有很大的差别,
因此我们在这里用单独的一个小节来讲述它们。
先看一个静态数据成员的例子。
#include
class MyClass
{
…………………………………………………………Page 59……………………………………………………………
public:
static int i;
};
int MyClass::i;
void main()
{
MyClass cls1;
MyClass cls2;
cls1。i=1;
cout
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!