面向对象C 第四章.pptVIP

  • 1
  • 0
  • 约2.47万字
  • 约 108页
  • 2023-08-23 发布于广东
  • 举报
4.5 成员函数重载及默认参数 【例4.11】构造一个求4个正整数中最大者的类Max,并用主程序验证它的功能。 class Max{ //声明类 private: //封装数据成员和成员函数 int a,b,c,d; //数据成员 int Maxi(int,int); //只允许类内部的成员函数调用 public: //对外界的接口 void Set(int,int,int,int); //设置对象初值 int Maxi(); //求最大值 }A[3]; //声明类的对象数组,定义结束 第六十一页,共一百零八页,2022年,8月28日 //类中成员函数的实现 int Max::Maxi(int x,int y) //求二个数的最大值 {return (xy)?x:y;} //使用两个默认参数 void Max::Set(int x1,int x2,int x3=0,int x4=0) {a=x1; b=x2; c=x3; d=x4; } int Max::Maxi() //求自己类中四个数的最大值 { int x=Maxi(a,b);//x和y为Maxi()函数的局部整数对象 int y=Maxi(c,d); return Maxi(x,y); } 第六十二页,共一百零八页,2022年,8月28日 //主程序 #include iostream using namespace std; void main() { A[0].Set(12,45,76,89); //为数组对象A[0]置初值 A[1].Set(12,45,76); //为数组对象A[1]置初值 A[2].Set(12,45); //为数组对象A[2]置初值 for(int i=0;i3;i++) //输出对象求值结果 coutA[i].Maxi() ; } 第六十三页,共一百零八页,2022年,8月28日 程序演示了可在声明类的同时也声明类的对象,这里是声明对象数组A,作用与在主程序里使用“Max A[3];”语句相同。为了提高可读性,一般不在声明类时声明对象,这里只是为了演示它的性质。 程序输出结果为:89 76 45 类中重载了函数Maxi,一个原型为Maxi(int,int),用来求两数中的大者。因为它只被自己的成员函数使用,所以定义为private。 另一个原型为Maxi(),它调用两次Maxi(int,int),然后再用这两次的结果作为Maxi(int,int)的参数,求出4个数中的最大值。 赋值成员函数Set使用2个默认参数,是为了书写方便。 第六十四页,共一百零八页,2022年,8月28日 4.6 this指针 在定义Point类的两个对象A和B之后,当执行语句“A.Setxy(25,55);”时,A.x和A.y就被赋值。但是,函数Setxy(int,int)作为代码,在计算机里是和具体的对象分开存储的。那么,它是怎样知道,是要对A进行操作而不是对B进行操作呢? 当执行A.Setxy(25,55 )时,成员函数Setxy(int,int )有一个隐藏参数,名为this指针。也就是说,源程序被编译器编译后,Setxy(int a, int b )实际上是如下形式: void Point::Setxy(int a, int b,(Point*)this) { this-x =a; this-y =b; } 成员函数的this指针指向对象A。成员中对x和y的引用表示是引用对象A的成员x和y。对于任何访问该成员函数的类的对象来说,C++编译器都认为是访问this指针所指向的对象中的成员。 第六十五页,共一百零八页,2022年,8月28日 C++规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向接受该函数调用的对象的指针,从而使成员函数知道该对哪个对象进行操作。在程序中,可以使用关键字this来引用该指针。使用this指针,保证了每个对象可以拥有自己的数据成员,但处理这些数据成员的代码可以被所有的对象共享。 除非特殊需要,一般情况下都省略符号“this-”,而让系统进行默认设置。 第六十六页,

文档评论(0)

1亿VIP精品文档

相关文档