八宝书库 > 文学其他电子书 > C语言实例教程(PDF格式) >

第8部分

C语言实例教程(PDF格式)-第8部分

小说: C语言实例教程(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




员函数IsInCircle中我们使用了类CCircle中定义的数据成员,而在 

此之前编译器只知道用以使用一个名为CCircle的类,但是不知道这 

个类中包括了什么样的成员,因此上面的代码在编译时通不过。  



如果解决所遇到的新问题呢?回过头来看类CPoint的定义,我们在定 

义类的同时定义了成员函数IsInCircle,联想到C语言中的函数,我 

们可以很自然的想到,可不可以选声明成员函数IsInCircle,然后再 

定义它呢?如果可以这样的话,我们就可以在类CPoint的定义中先声 

明成员函数IsInCircle,然后在定义了类CCircle之后再添加成员 

IsInCircle的定义。  



事实上我们正是基于这个想法来解决问题的。我们的确可以先在类 

CPoint的定义中声明成员函数IsInCircle,然后在后面添加它的定 

义,完整的代码如下:  



#include   



class CCircle;  


…………………………………………………………Page 51……………………………………………………………

struct CPoint  



{  



unsigned x;  



unsigned y;  



bool IsInCircle(CCircle *Circle);  



};  



class CCircle  



{  



public:  



unsigned Radius;  



CPoint Center;  



};  



bool CPoint::IsInCircle(CCircle *Circle)  



{  



return ( ((x…Circle…》Center。x)*(x…Circle…》Center。x)  



+(y…Circle…》Center。y)*(y…Circle…》Center。y))  



Radius*Circle…》Radius );  



}  



void main()  



{  



CPoint Center;  



CPoint Point;  



CCircle Circle;  



Center。x=0;  



Center。y=0;  



Point。x=2;  


…………………………………………………………Page 52……………………………………………………………

Point。y=3;  



Circle。Radius=3;  



Circle。Center=Center;  



if (Point。IsInCircle(&Circle))  



cout》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

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的