友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

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
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!