面向对象程序设计习题[共22页]_第1页
面向对象程序设计习题[共22页]_第2页
面向对象程序设计习题[共22页]_第3页
面向对象程序设计习题[共22页]_第4页
面向对象程序设计习题[共22页]_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word完美格式1 面向对象程序设计中的数据隐藏指的是参考答案为:DA输入数据必须输入保密口令B数据经过加密处理C. 对象内部数据结构上建有防火墙D对象内部数据结构的不可访问性解析输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏。面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。这就是面向对象程序设计中的数据隐藏所指。2 下列各项中符合函数重载必须满足的条件的是

2、参考答案为:DA 必须有不同的参数个数B对应的参数类型必须不相同C. A和B必须同时满足DA和B只要满足一个即可解析我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是: 有不同的参数个数;或者 对应的参数有不相同的数据类型,即和中只要有一个满足就可以了。当然两者都满足更好,但这不是必须的。3下列带缺省值参数的函数说明中,正确的说明是参考答案为:AAint Fun(int x,int y=2,int z=3);Bint Fun(int x=1,int y,int z=3);C. int Fun(int x,int y=2,int z);Dint Fun(int x=1,int y,in

3、t z=3);解析在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。从所给出的四个选项来看,只有“int Fun(int x,int y=2,int z=3)”符合这条规定,其它的都不符合。4有如下的对类“CSample”的说明,其中( )是错误的。 class CSample 参考答案为:AAint a=23;BCSample();public:CCSample(int val);D CSample();解析在上面对类“CSample”说明中,“CSample()”和“CSample(int val)”是该类重载

4、的构造函数、“ CSample()”是该类的析构函数,这三个语句都是正确的。错误的语句是“int a=23”,因为它违反了在类的声明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化。5已知类A中的一个成员函数的说明如下:void Set(A &a);则该函数的参数“A &a”的含义是参考答案为:CA指向A的指针为aB将变量a的地址赋给类AC类A对象引用a用作函数的形参D变量A与a按位与后作函数参数解析因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号“&”,则“&a”表示是类A的对象引用。所以“A &a”的含义是类A对象引用a用作

5、函数的形参。6若类A和类B的定义如下:class A public:int i,j;void get();class B:A int i,j;protected:int k;public: void make();void B:make() k=i*j; 则其中()是非法的表达式。参考答案为:DAvoid get();Bint k;Cvoid make();Dk=i*j;解析对于给定的四项中,前三项都是正确的,只有第四项是错误的。因为,类B是类A的私有派生类(缺省访问类型),所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B:make()”既然是类B的成员函数,则既可访

6、问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式“k=i*j;”造成了访问的二义性,即其中的i和j,到底是取自类A呢?还是取自类B呢?7下面的主程序中,语句( )是错误的。class A int i;public:virtual void fun()=0;A(int a) i=a; ;class B int j;public:void fun() coutsalary;Cx=worker.salary; (其中worker为具有类类型的对象)DLocation &rA=A1;int x=rAGetX(); (Location为已定义的类,A1为对象)解析因pointer为指向类对

7、象的指针,所以“pointer-salary”是正确的访问数据成员的形式;因worker为具有类类型的对象,所以“worker.salary”也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rAGetX();”表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX()给变量x赋值,这样的访问成员函数的形式也是正确的;“*pointer.salary;”中,因为运算符.的优先级高于运算符*的优先级,所以相当于“*(pointer.salary);”,那正确的形式应该是“*(pointersalary);

8、”。故“*pointer.salary”是不正确的访问。11 C+ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是 ( )DA. 增加了一些新的运算符 B. 允许函数重载,并允许设置缺省参数 C. 规定函数说明符必须用原型 D. 引进了类和对象的概念 12 下列符号不能组成标识符的是 (A ) A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符 13 类型修饰符 unsigned 不能修饰 (D ) A. char B. int C. long int D. float 14在 int a=3,int *p=&a ;中, *p 的值是 ( D) A. 变量 a 的地

9、址值 B. 无意义 C. 变量 p 的地址值 D.3 15下列关于指针的操作中,错误的是 (D ) A. 两个同类型的指针可以进行比较运算 B. 可以用一个空指针赋给某个指针 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加二,填空题不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。1面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由_机制支持,而后者则由_机制支持。答:函数重载、虚函数解析静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持。动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数(

10、与指针或引用)机制来支持。2由char const *str=”stucture”;所以定义的指针称为_,关键字const 所修饰的是_。答:指向常量的指针、指针所指的字符串解析根据由*在修饰符“const”中位置的不同,它所修饰的对象也不同,“const ”表示所修饰的是指针所指的常量,该指针称为指向常量的指针;“* const”表示所修饰的是指针本身,该指针称为常指针;“* const *”则表示所修饰的是指针本身和指针所指常量,该指针称为指向常量的常指针。3引入虚基类的目的是为了解决多重继承中的_和_问题。答:二义性、多占用空间解析在允许多重继承时可能出现两个问题,第一个是公有派生类中的

11、成员通过不同基类调用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一级公共基类存有备份,这就引起了公共基类的重复存储,也就多占了存储空间。引入虚基类的目的是为了解决多重继承中的这两个问题。4构造函数与析构函数所调用的虚函数是_的函数,因此调用时实现的是_联编。答:所在类、静态解析在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造函数来生成派生类对象。所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类还未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用自己的虚函数,因为虚函数的调用是不能由派生类调用基类的。

12、在析构派生类对象是时,先调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象。所以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数(原因同构造函数),基类的析构函数调用的也是它自己的虚函数,因为此时派生类对象以已被析构掉了。由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此调用时实现的是静态联编。7说明一个const成员函数(又称常量成员函数)的方法是,将const写在_之间,而且它修饰的是_。答:函数头与函数体、this指针解析为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号)与函数体的左花括号之间,而且

13、它修饰的是对象所属的this指针。表示该函数不能修改它所在对象中的数据成员的值。20对某个运算符的重载,实际上是用关键字_与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是_的。答:operater、void解析对某个运算符的重载,实际上是用关键字operater 与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是无类型的,即不能是void的。三改错题1分析下列程序中的错误,并说明出错原因。# include class base const int n;public:base() cout”Initializing defaultn”; base(int m) cou

14、t”Initializingn”; n=m; base() cout”Destroyingn”; ;void main() base x(1);base y=x;答:(1) n=m; const数据成员不以该形式赋值(2)错误处base y=x;,以对象初始化对象解析(1)作为const数据成员n不能用赋值表达式的形式为其赋初值,必须在定义构造函数时在函数头中以“base(int m):n(m)”形式来初始化。(2)base y=x; 语句中=不是赋值的意思,而是初始化的意思。即在定义类base的对象y时,以对象x给它初始化,相当于base y(x);。但是以对象初始化对象时,必须调用拷贝构造

15、函数才行。因程序中没给出拷贝构造函数,也不能调用系统的缺省拷贝构造函数,因用户给出了构造函数后,再也不能调用系统提供的任何缺省构造函数。所以,base y=x;是错误的。2分析下列程序中的错误,并说明出错原因。#include class A int x;public:A(int a) x=a; fun(); virtual void fun()=0;class B:public A public:B(int b) :A(b) void fun() ;void main() A aa(5);B bb(8); 答:1)A aa(5); 抽象类不能定义对象解析(1)在构造函数“A(int a)”调

16、用了纯虚函数“fun()”,因构造函数调用虚函数是静态联编,即调用的是它自己类的虚函数。在此调用的是纯虚函数,它只被说明,而未定义,所以不可能被执行,因此出错。(2)抽象类相当于是对类的引用性声明,所以它只能定义该类的指针和引用,而不能定义它的对象。在此,A为抽象类,而“A aa(5)”却定义了A的对象,因此是错误的。3分析下列程序中的错误,并说明出错原因。#include class AA int aa;AA(int xx) aa=xx; public:int get() return aa; AA() cout”Destroying”AA endl; ;main() AA elem(5);

17、coutelem.get()endl; 答:(1)AA(int xx) 的访问属性错、应具有公有属性解析(1)构造函数虽是由系统自动调用来生成对象的,但一般都是在类外调用,所以它的访问属性必须是公有的。程序中构造函数的访问属性是私有的(缺省值),运行中必定出错。四.完成程序题(本大题共5小题,每小题4分,共20分)根据题目要求,完成程序填空。1仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句。class point float x,y;public:point(float a,float b) x=a; y=b; float distance(point &p) fl

18、oat dx=_;float dy=_;return (float)sqrt(dx*dx+dy*dy);void main() point p1(2,3),p2(32,43);coutp1._endl; 答: p.x-x p.y-ydistance(p2)解析由于求两点之间距离的函数“distance”为成员函数,所以由该函数的this指针所指对象可用作起点(参数之一),另一个用作终点的参数,必须在函数的参数表中显式地给出。dx 和dy分别计算两个结点间x和y坐标间的距离,因此应该为:dx=p.x x 和 dy =p.y y。对它们求平方相加后开方即可,得到两点间的距离:(float)srrt

19、(da*da+dy*dy)。在主程序中求p1和p2两个结点之间的距离,由于由p1调用距离函数,所以由p2作为它的参数,即distance(p2)。2两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等。在空格处填入合适的内容,以完成下面的程序,使其重载运算符“=”,用以比较两个复数的相等。请在主函数中输出比较的结果。#include class complex double real,imag;public:complex(double r,double i) real=r; imag=i; bool operator=(complex &);int complex: operator=

20、(complex &com) return(_) void main() complex c1(12.3,32.5),c2(21.7,18.6);if(_)return cout”truen”;elsereturn cout”falsen”; 答: (real=com.real)&(imag=com.imag) c1=c2或c1.operator=(c2)解析若两个复数的相等,则必有它们的实数部分和虚数部分都相等,所以运算符重载函数中返回“(real=com.real)&(imag=com.imag)”,只有real=com.real与imag=com.imag都为真时,该函数的返回值才为真。

21、在主程序中,为了比较两个复数c1和c2,可以隐式地写成“c1=c2”,也可显式写成“c1.operator=(c2)”。3下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成员函数,但是类BB的友元函数。请在、和处各填入正确的内容,使程序能正常运行。#include _;class AA int t;public:AA(int x) t=x; void print(BB &b);class BB int s;public:BB(int y) s=y; friend void _print(BB &);void _ cout”AA:”T”;BB:”W.Sendl; void ma

22、in() AA m(6);BB n(8);m.print(n); 答: class BB; AA: AA:print(BB &w)解析由于AA类的成员函数“print”是类BB的友元函数,因此它必须有一个BB类的引用作为参数,以便有引用BB类数据成员的接口。但此时BB类还未定义,为解决此矛盾,在处先对BB类作引用性声明“class BB;”,告诉系统BB类在后面定义。因为函数“print”是类AA的成员函数,在类外定义必须加上类名和作用域分辨符,即在处加上“AA:”。在BB类外定义“print”时,因是友元,所以没有加上“BB:”的必要,但“AA:”还是必须加的,所以在处填“AA:print(

23、BB &w)”。五.程序分析题1请分析以下的程序,给出该程序的正确执行结果。#includeusing namespace std;机器运行结果7879与编译器有关int add(int x,int y) return x+y; void main() int m=2,n=3;cout1:add(m+,m+n)endl; m=2,n=3;cout2:add(+m,m+n)endl; m=2,n=3;cout3:add(m+n,m+)endl; m=2,n=3;cout4:add(m+n,+m)endl; 答:1:72:83:84:9解析在说明答案之前,要说明两个问题:1)C+语言中,函数参数是

24、压在栈里的,因压栈是从前往后进行的,所以出栈就是从后向前进行的,也即先取最后的参数,然后再向前逐个取用;2)对于单加运算,m+是先执行后加1,+m是加1后再执行。由此,因m=2,n=3;,所以:1:(m+)+(m+n)=2+(2+3)=7 (m+后执行,且后加1,所以m=2一直未变)2:(+m)+(m+n)=3+(2+3)=8 (+m后执行,但先加1,执行+m时,m=3了)3:(m+n)+(m+)=(3+3)+2=8 (先执行m+,后加1,执行m+n时,m=3了)4:(m+n)+(+m)=(3+3)+3=9; (先执行+m,且先加1,故一开始就有m=3)3请分析下面的程序并给出该程序的执行结果

25、。#include class AA int a;public:AA() cout”Initualizing AA!n”; AA() cout”Destroying AA!n”;class BB int b;AA p;public:BB() cout”Initualizing BB!n”; BB() cout”Destroying BB!n”;void main() BB X;cout”Ending main!n”;答:Initualizing AA!Initualizing BB!Ending main!Destroying BB!Destroying AA!解析虽然在主程序中只定义了一个类

26、BB的对象,但在类BB中声明了类AA的对象作为它的数据成员。当一个类中含有对象作为数据成员时,在生成对象时,先调用成员对象的构造函数,再调用类自己的构造函数,所以输出了“Initualizing AA!”(成员对象构造函数的输出)和“Initualizing BB!”(类自己构造函数的输出)。对象生成后,执行下一句输出语句,则输出“Ending main!”。此时程序结束,调用析构函数来析构掉对象,先调用类自身的析构函数,其输出为“Destroying BB!”,再调用成员对象的析构函数,其输出为“Destroying AA!”。4写出下列程序的运行结果。#include class AA p

27、ublic:static int n;AA() n+; ;int AA:n=0;main() cout”AA:n=”AA:nendl; AA d1;coutd1.nendl; AA d2;coutd2.nendl; AA d3,d4;coutd1.nendl; coutd2.nendl; 答:AA:n=0d1.n=1d2.n=2d1.n=4d2.n=4解析由于数据成员n的访问属性是公有的,所以在类外可访问它;又它是静态变量,所以具有全局性。在构造函数中,执行的是n+操作,即每次调用构造函数n就加1。当程序开始时,因未定义对象,所以n的值为初始化时的值,则输出为“AA:n=0”。当定义了对象d1

28、后,由于调用了构造函数,则该对象中n=1,故输出“d1.n=1”。同理,对象d2输出“d2.n=2”。由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,所以下面两条语句的输出为“d1.n=4”和“d2.n=4”。5写出下列程序的输出结果。#include class AA public:AA cout”Constructor of AA n”; fun(); virtual void fun() cout”AA:fun() calledn”; ;class BB:public AA public:BB() cout”Constructor of BBn”; fun(

29、); void fun() cout”BB:fun() calledn”; ;void main() BB d; 答:Constructor of AAAA:fun() called. Constructor of BB.BB:fun() called.解析虽然函数fun()说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun()。所以,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数“fun()”,所以输出为“Constructor of AA”和“AA:fun() called.”。同理调用派生类的构造函数时,生成的输出为“Con

30、structor of BB.”和“BB:fun() called.”。6请给出下面的程序的输出结果。#include template class Tvoid sort(T* a,int n) T num;for(int i=0;in-1;i+) for(int j=i;jaj+1) num=aj; aj=aj+1; aj+1=num; for(i=0;in;i+) coutaiendl; void main() int iver5= 12,45,9,23,37 ;double dver5= 22.3,56.7,43.5,13.8,8.6 ;sort(iver,5);sort(dver,.5

31、);答:9 12 23 37 458.6 13.8 22.3 43.5 56.7解析这是使用模板的例子。函数sort是一个递增的排序函数,T是个模板。当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序。所以输出如上结果。7分析以下程序的执行结果 #include void main()int a; int &b=a; / 变量引用 b=10; couta=aendl; 解: 本题说明变量引用的方法。b是a的引用,它们分配相同的空间,b的值即为a的值。所以输出为 a=10。8分析以下程序的执行结果 #include class Sample int x; pu

32、blic: Sample(); Sample(int a)x=a;Sample(Sample &a)x=a.x+1; void disp()coutx=xendl; ; void main() Sample s1(2),s2(s1); s2.disp(); 解: 本题说明类拷贝构造函数的使用方法。Sample类的Sample(Sample &a)构造函数是一个拷贝构造函数,将a对象的x值赋给当前对象的x后加1。 所以输出为:x=3。9 分析以下程序的执行结果 #include class Sample public: int x; int y; void disp() coutx=x,y=y*

33、pc=10; pc=&Sample:y; p-*pc=20; p-disp(); 解: 本题说明了类数据成员指针的使用方法。这里通过指向对象的指针来给类数据成员赋值,其原理与上题相似。输出为: x=10,y=20 10分析以下程序的执行结果 #include class Sample int x; int y; public: Sample(int a,int b) x=a;y=b; int getx()return x; int gety()return y; ; void main() int (Sample:*fp)(); fp=&Sample:getx; Sample s(2,7);

34、int v=(s.*fp)(); fp=&Sample:gety; int t=(s.*fp)(); coutv=v,t=tendl; 解: 本题说明了类成员函数指针的使用方法。在main()中定义的fp是一个指向Sample类成员函数的指针。执行fp=Sample:getx后。fp指向成员函数getx(),int v=(s.*fp)()语句等价于int v.getx(),v=x=2;执行fp=Sample:gety之后,fp指向成员函数gety(),int t=(s.*fp)()语句等价于int t=s.gety(),t=x=7。所以输出为:v=2,t=7 11分析以下程序的执行结果 #in

35、clude class Sample int x; int y; public: Sample(int a,int b) x=a;y=b; int getx()return x; int gety()return y; ; void main() int (Sample:*fp)(); fp=&Sample:getx; Sample s(2,7),*p=&s; int v=(p-*fp)(); fp=&Sample:gety; int t=(p-*fp)(); coutv=v,t=tendl; 解: 本题说明了类成员函数指针的使用方法。这里通过指向对象的指针来调用指向类成员函数的指针,其原理与

36、上题相似。输出仍为: v=2,t=7 12分析以下程序的执行结果 #include class base public: base()coutconstructing base classendl; base()coutdestructing base classendl; ; class subs:public base public: subs()coutconstructing sub classendl; subs()coutdestructing sub classendl; ; void main() subs s; 解: 本题说明单继承情况下构造函数和析构函数的调用顺序。这里ba

37、se为基类,subs为派生类。所以输出为: constructing base class constructing sub class destructing sub class destrcuting base class 注意:在单继承情况下,首先调用基类的构造函数 ,随后调用派生类的构造函数,析构函数的调用顺序则正好相反。 13 分析以下程序的执行结果: #includeclass base int n; public: base(int a) coutconstructing base classendl; n=a; coutn=nendl; base()coutdestructin

38、g base classendl; ; class subs:public base base bobj; int m; public: subs(int a,int b,int c):base(a),bobj(c) coutconstructing sub cassendl; m=b; coutm=mendl; subs()coutdestructing sub classendl; ; void main() subs s(1,2,3); 解: 本题说明 派生类中含有对象成员情况下构造函数和析构函数的调用顺序。这里base为基类,subs为派生类,subs类的构造函数中含有对象成员。 所以

39、输出为: constrcuting base class n=1 constructing base class n=3 constructing sub class m=2destructing sub class destructing base class destructing base class 注意:当派生类中含有对象成员时,构造函数的调用顺序如下: 基类的构造函数 2)对象成员的构造函数 3)派生类的构造函数 析构函数的调用顺序与之相反 14分析以下程序的执行结果 #include class A public: int n; ; class B:public A; class

40、 C:public A; class D:public B,public C int getn()return B:n; ; void main() D d; d.B:n=10; d.C:n=20; coutd.B:n,d.C:nendl; 解: D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本。所以对于对象d,d.B:n与d.C:n是两个不同的数据成员它们互无联系。 所以输出为: 10,20 15分析以下程序的执行结果 #include class A public: int n; ; class B:virtual public A; class C:virtual publ

41、ic A; class D:public B,public C int getn()return B:n; ; void main() D d; d.B:n=10; d.C:n=20; coutd.B:n,d.C:nendl; 解: D类是从类和类派生的而类和类又都是从类派生,但这是虚继承关系即是虚基类因此和共用一个的副本所以对于对象d,d.B:n与d.C:n是一个成员。 所以输出为: 20,20 16分析以下程序执行结果 #include int add(int x,int y) return x+y; double add(double x,double y) return x+y; vo

42、id main() int a=4,b=6; double c=2.6,d=7.4; coutadd(a,b),add(c,d)endl; 解: 本题说明函数重载的使用方法, 这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。 所以输出为: 10,10 17分析以下程序的执行结果 #include class Sample int i; double d; public: void setdata(int n)i=n; void setdata(double x)d=x; void disp() couti

43、=i,d=dendl; ; void main() Sample s; s.setdata(10); s.setdata(15.6); s.disp(); 解: 本题说明重载成员函数的使用方法。setdata()成员函数有两个,根据其参数类型加以区分。 所以输出为:i=10, d=15.6 22分析以下程序的执行结果 #include class Sample int n; public: Sample() Sample(int i)n=i; Sample &operator =(Sample); void disp()coutn=nendl; ; Sample &Sample:operato

44、r=(Sample s) Sample:n=s.n; return *this; void main() Sample s1(10),s2; s2=s1; s2.disp(); 解: 本题说明重载运算符(=)的使用方法。operator=成员函数实现两个对象的赋值。 所以输出为: n=10 六程序设计题1设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。 解:在Triangle类中设计一个友元函数operator+(Triangle t1,Triangle t2),它重载运算符+,返回t1和t2两个三角形的面积之和。

45、 本题程序如下: #include #include class Triangle int x,y,z; double area; public: Triangle(int i,int j,int k) double s; x=i;y=j;z=k; s=(x+y+z)/2.0; area=sqrt(s*(s-x)*(s-y)*(s-z); void disparea() coutArea=areaendl; friend double operator+(Triangle t1,Triangle t2) return t1.area+t2.area; ; void main() Triangle t1(3,4,5),t2(4,5,6); double s; coutt1:; t1.disparea(); coutt2:; t2.disparea(); s=t1+t2; cout总面积=sendl; 本程序执行结果如下: t1:Area=6 t2:Area=9.92157 总面积=15.9216 2重载运算符“+”友元函数只能返

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论