收藏 分享(赏)

第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt

上传人:mcady 文档编号:4857454 上传时间:2019-01-16 格式:PPT 页数:64 大小:298.50KB
下载 相关 举报
第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt_第1页
第1页 / 共64页
第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt_第2页
第2页 / 共64页
第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt_第3页
第3页 / 共64页
第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt_第4页
第4页 / 共64页
第4章+《C++程序设计教程与实验指导》-杨国兴+++类与对象.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、C+语言程序设计,杨国兴 张东玲 彭涛,中国水利水电出版社,第4章 类与对象,4.1 类与对象 4.2 构造函数与析构函数 4.3 类的组合 4.4 友元 4.5 静态成员 4.6 对象数组与对象指针 4.7 this指针,4.1 类与对象,4.1.1 类与对象的概念对象(object):是现实世界中的客观事物。类(class):是把具有相同属性的事物划分为一类,从而得出的抽象概念。面向对象程序设计中的类,是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了抽象的描述。对象是类的实例,类是同种对象的抽象。,第4章 类与对象,如:确定大小和颜色的矩形都是一个个具体的对象,而将所有矩

2、形的共同特点抽象出来,就是一个矩形类。这些共有的属性包括颜色 ( color ),左上角坐标 ( left, top ),长 ( length )和宽 ( width ) 等;对这些属性的处理包括改变矩形的颜色 ( SetColor ) 和大小 ( SetSize ) ,移动矩形到新的位置 ( Move ),绘出矩形 ( Draw ) 等。将矩形的这些属性和方法作为一个整体,封装在一起形成一个矩形类。,4.1 类与对象,4.1.2 类的声明class 类名private:私有数据成员和成员函数;protected:保护数据成员和成员函数;public:公有数据成员和成员函数;,第4章 类与对象

3、,例4.1 定义一个长方形类CRect,其数据成员包括颜色,左上角坐标,长和宽,其函数成员包括改变矩形的颜色(SetColor)和大小(SetSize),移动矩形到新的位置(Move),绘出矩形(Draw)。,class CRect private:char color10;int left;int top;int length;int width; public:void SetColor(char *c);void SetSize(int l, int w);void Move(int t,int l);void Draw(); ;,第4章 类与对象,例4.1 (续一),void CRec

4、t:SetColor(char *c) strcpy(color, c); void CRect:SetSize(int l, int w) length=l;width = w; void CRect:Move(int t,int l) top = t;left = l; void CRect:Draw() cout “矩形左上角坐标为(“ left “,“ top “)“ endl;cout “矩形长和宽分别为“ length “,“ width endl;cout “矩形的颜色是“ color endl; ,第4章 类与对象,域运算符(:)用于指出该函数是哪一个类的成员函数,用法:类名:

5、函数名(参数表),例4.1 (续二),void main() CRect r; r.SetColor(“Red“);r.Move(10,20);r.SetSize(100,200);r.Draw();r.Move(50,50);r.SetColor(“Blue“);r.Draw(); ,第4章 类与对象,定义CRect类的对象,定义对象的格式:类名 对象名1,对象名2,,访问对象的公有成员,格式为:对象名.公有成员函数名(参数表)对象名.公有数据成员名,程序运行结果为: 矩形左上角坐标为(20,10) 矩形长和宽分别为100,200 矩形的颜色是Red 矩形左上角坐标为(50,50) 矩形长和

6、宽分别为100,200 矩形的颜色是Blue,4.1 类与对象,4.1.3 成员的访问控制private: 私有访问权限,只允许类中的成员函数访问,其他函数不能访问。 protected: 保护访问权限,在第7章中介绍。public: 公有访问权限,在任何函数中都可以访问。例:若主函数中有以下语句,是否正确?CRect r;strcpy( r.color , “red”);r.top = 10;r.left = 20;,第4章 类与对象,4.1 类与对象,4.1.3 成员的访问控制(续)若不指定类中的成员的访问权限,则默认为私有成员。类也可以由struct关键字声明,strust与class的

7、区别是:如果不指定访问权限,前者缺省的访问权限是公有的,而后者是私有的。用struct声明前面的矩形类:struct CRect void SetColor(char *c);void SetSize(int l, int w);void Move(int t,int l);void Draw(); private:char color10;int left;int top;int length;int width; ;,第4章 类与对象,4.1 类与对象,4.1.4 类的成员函数1. 类成员函数的定义方式 在类外部定义:如前面定义的长方形类的成员函数一般格式为:函数类型 类名:成员函数名(参

8、数说明)函数体 在类中定义:如class CRect public:void setcolor( char *c ) strcpy( color , c ); ;,第4章 类与对象,4.1 类与对象,4.1.4 类的成员函数(续一)2. 内联成员函数 将成员函数的定义直接写在类中即成为内联成员函数 在类外定义时用inline指出:如:inline void CRect:SetColor(char *c)strcpy(color, c);,第4章 类与对象,4.1 类与对象,4.1.4 类的成员函数(续二)3. 带默认参数值的成员函数 注意:默认参数只能在声明或定义中的一处给出,即 如在类中的函

9、数声明已经给出默认参数值:void SetSize(int l=100, int w=100); 则在函数定义时就不能再给出默认值。 同样如果在定义时给出了默认值:void CRect:SetSize(int l=100, int w=100)length=l;width = w; 在声明处就不能再给默认值了。,第4章 类与对象,4.2 构造函数与析构函数,构造函数:对对象进行初始化。 析构函数:在对象销毁时进行内存释放等清理工作。 4.2.1 构造函数1. 构造函数的特点(1) 构造函数的函数名与类名相同。(2) 不能定义构造函数的类型(即不能指明构造函数返回值的类型)。(3) 构造函数应声

10、明为公有函数。(4) 构造函数不能在程序中调用,在对象创建时,构造函数被系统自动调用。 2. 构造函数的作用构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于其它对象的特征。,第4章 类与对象,例 为CRect类添加构造函数,class CRect private:char color10; public:CRect( );CRect(char *c, int t, int left, int len, int wid);void SetColor(char *c); ; CRect:CRect() strcpy(color, “Black“

11、);top = 0;left = 0;length = 0;width = 0; ,第4章 类与对象,例 为CRect类添加构造函数(续),CRect:CRect(char *c, int t, int lef, int len, int wid ) strcpy(color, c);top = t;left = lef;length = len;width = wid; void main() CRect r1; /自动调用第一个构造函数CRect r2(“red”, 10,10,100,100); /自动调用第二个构造函数CRect r3(“green“, 200,200,50,50);

12、/自动调用第二个构造函数r1.Draw();r2.Draw();r3.Draw(); ,第4章 类与对象,例4.2 构造函数的初始化表,#include using namespace std; class A private:const double PI;int b;int ,第4章 类与对象,void main() A x(10);x.Output(); ,程序运行结果: 3.14,10,10,4.2 构造函数与析构函数,4.2.2 析构函数1. 析构函数的特点(1) 析构函数名字为符号“”加类名。 (2) 析构函数没有参数,不能指定返回值类型。 (3) 一个类中只能定义一个析构函数,所

13、以析构函数不能重载。(4) 当一个对象作用域结束时,系统自动调用析构函数。如CRect类的析构函数声明为:CRect();定义为: CRect:CRect() 2. 析构函数的作用在删除一个对象前被调用,释放该对象成员的内存空间,以及其它一些清理工作。,第4章 类与对象,例4.3 设计一个简单的字符串类,类中有两个数据成员,分别表示字符串的长度和字符串的内容,有一个构造函数和一个析构函数,函数GetLength( )返回字符串长度,函数GetContents( )获得字符串的内容,重载函数SetContents( )给字符串设置值。,#include #include using namesp

14、ace std; class CString private:int length;char *contents; public:CString(); /构造函数CString(); /析构函数int GetLength();void GetContents(char *str);void SetContents(int len, char *cont);void SetContents(char *cont); ;,第4章 类与对象,例4.3 (续一),CString:CString() length = 0;contents = NULL;cout “字符串对象初始化“ endl; CSt

15、ring:CString() cout contents “被销毁“ endl;if(contents != NULL)delete contents; int CString:GetLength() return length; void CString:GetContents(char *str) strcpy(str, contents); ,第4章 类与对象,例4.3 (续二),void CString:SetContents(int len, char *cont) length = len;if(contents != NULL)delete contents;contents =

16、 new charlen+1;strcpy(contents,cont);cout “两个参数的SetContents函数“ endl; void CString:SetContents( char *cont) length = strlen(cont);if(contents != NULL)delete contents;contents = new charlength+1;strcpy(contents,cont);cout “一个参数的SetContents函数“ endl; ,第4章 类与对象,例4.3 (续三),void main() CString str1,str2; /两

17、次调用构造函数str1.SetContents(“第一个字符串“); /调用有一个参数的SetContents函数str2.SetContents(20, “第二个字符串两个参数“); /调用有两个参数的SetContents函数int i = str1.GetLength();char string100; str1.GetContents(string);cout i “ “ string endl;i = str2.GetLength();str2.GetContents(string);cout i “ “ string endl; ,第4章 类与对象,程序运行结果为: 字符串对象初始

18、化 字符串对象初始化 一个参数的SetContents函数 两个参数的SetContents函数 12 第一个字符串 20 第二个字符串两个参数 第二个字符串两个参数被销毁 第一个字符串被销毁,4.2 构造函数与析构函数,4.2.3 拷贝构造函数拷贝构造函数也是构造函数,它的作用是用一个已经存在的对象初始化新对象,拷贝构造函数的参数为该类对象的引用。例4.4 设计一个复数类,两个数据成员分别表示复数的实部(real)和虚部(imag),三个构造函数分别在不同的情况下初始化对象,函数Set()设置复数实部和虚部的值,函数Print()输出复数,函数Add()和函数Sub()分别实现复数的加减法运

19、算。,第4章 类与对象,例4.4 源程序,#include “iostream“ using namespace std; class CComplex private:double real;double imag; public:CComplex();CComplex(double r, double i);CComplex(CComplex ,第4章 类与对象,例4.4 源程序(续一),CComplex:CComplex() real = 0.0;imag = 0.0; CComplex:CComplex (double r, double i) real = r;imag = i; C

20、Complex:CComplex (CComplex ,第4章 类与对象,例4.4 源程序(续二),/ 显示复数值 void CComplex:Print() cout “(“ real “,“ imag “)“ endl; / 返回两个复数的相加结果 CComplex CComplex:Add(CComplex c) CComplex temp;temp.real = real + c.real;temp.imag = imag + c.imag;return temp; / 返回复数相减的结果 CComplex CComplex:Sub(CComplex c) CComplex temp;

21、temp.real = real - c.real;temp.imag = imag - c.imag;return temp; ,第4章 类与对象,例4.4 源程序(续三),void main(void) CComplex a, b(3.0,4.0), c;CComplex d(b); /调用复数类的拷贝构造函数cout “a = “;a.Print();cout “b = “;b.Print();cout “d = “;d.Print();c = b.Add(d);d = a.Sub(d);cout “c = “;c.Print();cout “d = “;d.Print(); ,第4章

22、类与对象,程序运行结果为: a = (0, 0) b = (3, 4) d = (3, 4) c = (6, 8) d = (-3, -4),4.3 类的组合,类的组合就是在一个类中内嵌其他类的对象作为成员,因为内嵌对象是该类对象的组成部分,当创建该对象时,其内嵌对象也被自动创建。在C+中是通过构造函数的初始化表为内嵌对象初始化的。组合类带有初始化表的构造函数的定义格式为:类名:构造函数(参数表):内嵌对象1(参数表1),内嵌对象2(参数表2),构造函数体组合类构造函数的执行顺序为:(1)按内嵌对象的声明顺序依次调用内嵌对象的构造函数。(2)然后执行组合类本身的构造函数。,第4章 类与对象,例

23、4.5 点类CPoint和线段类CLine,#include #include using namespace std; class CPoint public:CPoint(int x=0, int y=0)X=x;Y=y;cout “ CPoint 构造函数被调用“ endl;CPoint(CPoint ,第4章 类与对象,例4.5 点类CPoint和线段类CLine(续一),CPoint:CPoint(CPoint ,第4章 类与对象,例4.5 点类CPoint和线段类CLine(续二),CLine:CLine(CPoint ps, CPoint pe): start(ps), end(

24、pe) cout “CLine 构造函数被调用“ endl; float CLine:GetDistance() double x = double (end.GetX() - start.GetX() );double y = double (end.GetY() - start.GetY() );return (float) sqrt(x*x + y*y ); void main() CPoint p1(1,1), p2(4,5);CLine l(p1, p2);cout “The distance is :“;cout l.GetDistance() endl; ,第4章 类与对象,程序

25、运行结果为: CPoint 构造函数被调用 CPoint 构造函数被调用 CPoint 拷贝构造函数被调用 (4,5) CPoint 拷贝构造函数被调用 (1,1) CPoint 拷贝构造函数被调用 (1,1) CPoint 拷贝构造函数被调用 (4,5) CLine 构造函数被调用 The distance is :5,例4.5 点类CPoint和线段类CLine(续三),CLine类的对象l的构造过程:,第4章 类与对象,4.4 友元,友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制,友元分为友元函数和友元类。友元函数:一般函数或类的成员函数友元类:友元类的所

26、有成员函数都自动成为友元函数 4.4.1 友元函数定义友元函数时,只要在函数原型前加入关键字friend,并将函数原型放在类中,格式为:friend 类型标识符 友元函数名(参数列表);友元函数可以是一个普通函数,也可以是其他类的成员函数,在其函数体中可以通过对象名直接访问这个类的私有成员。,第4章 类与对象,例4.6 定义点类CPoint,写一个函数计算两点之间的距离。,#include #include using namespace std; class CPoint public:CPoint(int x=0, int y=0);int GetX();int GetY(); priva

27、te:int X,Y; ; CPoint:CPoint(int x, int y) X=x;Y=y; ; int CPoint:GetX() return X; ,第4章 类与对象,int CPoint:GetY() return Y; double GetDistance(CPoint start, CPoint end) int x1,y1,x2,y2;double d;x1 = start.GetX();y1 = start.GetY();x2 = end.GetX();y2 = end.GetY();d = sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)

28、 );return d; void main() CPoint p1(1,1), p2(4,5);double d;d = GetDistance(p1,p2);cout “The distance is :“ d endl; ,例4.6 (续),将函数GetDistance()声明为CPoint类的友元。将CPoint类修改如下: class CPointpublic:CPoint(int x=0, int y=0);int GetX();int GetY();friend double GetDistance(CPoint start, CPoint end);private:int X,

29、Y;函数GetDistance()改写如下:double GetDistance(CPoint start, CPoint end)double d;d = sqrt( (end.X-start.X)*(end.X-start.X) + (end.Y-start.Y)*(end.Y-start.Y) );return d;,第4章 类与对象,4.4 友元,4.4.2 友元类如果一个类(如类A)的很多成员函数都需要经常访问另一个类(如类B)的私有成员,可以将类A声明为类B的友元。若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有成员。声明友元类的语法形式为:Cla

30、ss Bfriend class A; / 声明A为B的友元类;,第4章 类与对象,例4.7 友元类的使用,#include using namespace std; class A private:int x; public:void Display()cout x endl;int Getx()return x;friend class B; ;,第4章 类与对象,class B private:A a; public:void Set(int i);void Display(); ; void B:Set(int i) a.x=i; void B:Display() cout a.x e

31、ndl; void main() B b;b.Set(10);b.Display(); ,程序运行结果为: 10,4.4 友元,4.4.2 友元类(续)注意:友元关系是单向的:在上面的例子中,B类是A类的友元,所以B类的成员函数可以访问A类的私有成员,但A类不是B类的友元,A类的成员函数不能访问B类的私有成员。友元关系是不能传递的:既如果A类是B类的友元,B类是C类的友元,并不能推断A类是C类的友元。,第4章 类与对象,4.5 静态成员,4.5.1 静态数据成员静态数据成员特点:在每个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。静态数据成员的定义

32、格式:在定义类的成员时前面加staticstatic 类型标识符 静态数据成员名;在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某个地方用类名限定进行定义,这时也可以进行初始化,格式如下:类型标识符 类名:静态数据成员名 = 初始值;静态数据成员不属于任何一个对象,可以通过类名直接对它进行访问,一般的用法是:类名:静态数据成员名,第4章 类与对象,例4.8 在CStudent类中添加静态数据成员,保存CStudent类的对象总数。,#include #include using namespace std; class CStudent private:int number;

33、char name10;static int total; public:CStudent(int xh, char *xm);CStudent();int GetTotal();int GetNumber(); ;,第4章 类与对象,CStudent:CStudent(int xh, char *xm) number = xh;strcpy(name, xm);total+; CStudent:CStudent() total-; int CStudent:GetTotal() return total; int CStudent:GetNumber() return number; ,例4

34、.7 (续),int CStudent:total = 0; void func(); void main() CStudent s1(10001, “AAAAAA“ );cout s1.GetNumber() endl;cout s1.GetTotal() endl;CStudent s2(10002, “BBBBBB“ );cout s2.GetNumber() endl;cout s1.GetTotal() endl;cout s2.GetTotal() endl;func();cout s1.GetNumber() endl;cout s1.GetTotal() endl; void

35、func() CStudent s3(10003, “CCCCCC“ );cout s3.GetNumber() endl;cout s3.GetTotal() endl; ,第4章 类与对象,程序运行结果为: 10001 1 10002 2 2 10003 3 10001 2,4.5 静态成员,4.5.1 静态数据成员(续)例4.7中,若在主函数中使用下面的语句:cout CStudent:total endl;在编译时就会产生错误信息“不能访问CStudent类的私有成员”,是由于total是类的私有静态成员,类外不能直接访问。如果改写成下面的语句:cout CStudent:GetTot

36、al() endl;仍然有语法错误“GetTotal()不是静态成员函数,调用非法”。即不能用类名调用非静态成员函数。,第4章 类与对象,4.5 静态成员,4.5.2 静态成员函数静态成员函数:在成员函数声明的前面加上关键字static。 静态成员函数的特点:(1) 对于公有的静态成员函数,可以通过类名或对象名来调用,而一般的非静态成员函数只能通过对象名来调用。静态成员函数可以由类名通过符号“:”直接调用。(2) 静态成员函数可以直接访问该类的静态数据成员和静态函数成员,不能直接问非静态数据成员和非静态成员函数。,第4章 类与对象,例4.9 在CStudent类中添加静态成员函数,#inclu

37、de #include using namespace std; class CStudent private:int number;char name10;static int total; public:CStudent(int xh, char *xm);CStudent();static int GetTotal();int GetNumber(); ;,第4章 类与对象,CStudent:CStudent(int xh, char *xm) number = xh;strcpy(name, xm);total+; CStudent:CStudent() total-; int CSt

38、udent:GetTotal() return total; int CStudent:GetNumber() return number; ,例4.8 (续),int CStudent:total = 0; void func(); void main() cout CStudent:GetTotal() endl;CStudent s1(10001, “AAAAAA“ );cout CStudent:GetTotal() endl;CStudent s2(10002, “BBBBBB“ );cout CStudent:GetTotal() endl;func();cout CStudent

39、:GetTotal() endl; void func() CStudent s3(10003, “CCCCCC“ );cout s3.GetTotal() endl; ,第4章 类与对象,程序运行结果为: 0 1 2 3 2,可通过类名直接访问静态成员函数,这样即使未定义CStudent类的对象,也可以访问静态数据成员total了,4.5 静态成员,4.5.2 静态成员函数(续)注意:在静态成员函数中访问非静态数据成员,或非静态成员函数,都会产生语法错误。例如:int CStudent:GetTotal()cout number; return total;,第4章 类与对象,语法错误,不能

40、在静态成员函数中访问非静态数据成员,4.6 常对象与常成员函数,4.6.1 常对象常对象定义格式:const 类名 对象名;引用对象数组元素的公有成员:数组名下标.成员名;,第4章 类与对象,例4.10 常对象调用普通成员函数产生错误,#include using namespace std; class A public:A( float a, float b)x = a; y = b;void Output()cout x “,“ y endl; private:float x, y; ; void main() const A a(20, 20);a.Output(); / 错误,常对象

41、不能调用普通成员函数 ,第4章 类与对象,4.6 常对象与常成员函数,4.6.2 常成员函数常成员函数的定义格式:函数类型 函数名(参数列表) const;例如:float area(float r) const;,第4章 类与对象,例4.11 使用常成员函数访问常对象中的数据成员,#include using namespace std; class A public:A( float a, float b)x = a; y = b;void Output();void Output() const; private:float x, y; ; void A:Output() cout “普

42、通成员函数“ endl;cout x “,“ y endl; ,第4章 类与对象,void A:Output() const cout “常成员函数“ endl;cout x “,“ y endl; void main() A a1(10, 20);const A a2(30, 40);a1.Output(); a2.Output(); ,程序运行结果:普通成员函数10,20常成员函数30,40,4.6 常对象与常成员函数,4.6.2 常成员函数 注意:(1)const是函数的一部分,在说明部分和实现部分都要加上关键字const。(2)在常成员函数中,不能更新对象的数据成员,也不能调用该类的普

43、通成员函数。(3)常对象只能调用常成员函数,不能调用该类的普通成员函数。普通对象即可以调用普通成员函数,也可以调用常成员函数,但会优先调用普通成员函数。,第4章 类与对象,4.7 对象数组与对象指针,4.7.1 对象数组对象数组:数组中的每一个元素都是类的对象。声明一个一维对象数组的语法形式:类名 数组名常量表达式;引用对象数组元素的公有成员:数组名下标.成员名;对象数组的初始化:调用构造函数对每个元素初始化如: CStudent s3 = CStudent(10001, “AAAAAA“ ),CStudent(10002, “BBBBBB“ ),CStudent(10003, “CCCCCC

44、“);,第4章 类与对象,例4.12 对象数组的应用,#include #include using namespace std; class CStudent private:int number;char name10;int age; public:CStudent(int xh, char *xm, int a);int GetAge(); ;,第4章 类与对象,CStudent:CStudent(int xh, char *xm, int a) number = xh;strcpy(name, xm);age = a; int CStudent:GetAge() return age

45、; ,例4.12 (续),void main() int sum=0;CStudent s5 = CStudent(10001, “AAAAAA“, 20),CStudent(10002, “BBBBBB“,22 ),CStudent(10003, “CCCCCC“,24 ),CStudent(10004, “DDDDDD“,26 ),CStudent(10005, “EEEEEE“,28 );for(int i=0; i5; i+)sum += si.GetAge();cout sum/5 endl; ,第4章 类与对象,程序运行结果为: 24,4.7 对象数组与对象指针,4.7.2 对象指

46、针对象指针:用于存放对象地址的变量。声明对象指针的语法形式:类名 *对象指针名;例如:CStudent *p;CStudent s(1001,”AAAAAA”, 20);p = &s;通过对象指针访问成员的方法为:对象指针名-成员名,第4章 类与对象,例4.13 通过对象指针访问成员,将例6.9主函数改写,void main() int sum=0;CStudent *p5;p0 = new CStudent(10001, “AAAAAA“, 20);p1 = new CStudent(10002, “BBBBBB“, 22);p2 = new CStudent(10003, “CCCCCC“

47、, 24);p3 = new CStudent(10004, “DDDDDD“, 26);p4 = new CStudent(10005, “EEEEEE“, 28);for(int i=0; iGetAge();cout sum/5 endl;for(i=0; i5; i+)delete pi; ,第4章 类与对象,程序运行结果为: 24,4.8 this指针,this指针:类的每个普通成员函数都有一个隐含的this指针参数,不需要显示说明。this指针指向调用该函数的对象。 例:class CPointpublic:CPoint(int x=0, int y=0);int GetX();i

48、nt GetY();private:int x, y;CPoint:CPoint(int x, int y)x=x;y=y;,第4章 类与对象,此处的x和y都是函数形参中的x和y,因为参数是局部变量,在函数体中优先访问(同名覆盖),因此此处无法访问到类成员中的x和y,可将构造函数改写如下: CPoint:CPoint(int x, int y) this - x=x;this - y=y; ; 定义该类对象: CPoint p(10,20);,例4.14 定义一个二叉搜索树,在树中查找指定节点,#include using namespace std; class CTree private:int value; /节点的值CTree *left, *right; /节点的左节点指针、右节点指针 public:CTree(int v);CTree();int GetValue(); /得到节点的值void add(int v); /向二叉树添加一个节点CTree *find(int v); /查找值为v的节点 ;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报