C++实验三 构造函数和析构函数题目+答案
- 格式:doc
- 大小:184.50 KB
- 文档页数:15
1、以下有关构造函数的叙述不正确的是()。
A、构造函数名必须和类名一致B、构造函数在定义对象时自动执行C、构造函数无任何函数类型D、在一个类构造函数有且仅有一个2、以下有关析构函数的叙述不正确的是()。
A、一个类只能定义一个析构函数B、析构函数和构造函数一样可以有形参C、析构函数不允许有返回值D、析构函数名前必须冠有符号“~”3、系统提供的默认拷贝构造函数中形参表和函数体分别为()。
A、形参表为空,函数体为空B、形参表为空,函数体不为空C、形参表不为空,函数体为空D、形参表不为空,函数体不为空4、设A为test类的对象且赋有初值,则语句test B=A;表示()。
A、语法错B、为对象A定义一个别名C、调用复制构造函数,将对象A复制给对象BD、仅说明B和A属于同一类5、若有如下类定义,则下列叙述正确的是()。
class Time{ int H,M,S;public:void Time(int h,int m,int s) { }; //A} //BA、A行有错误B、B行有错误C、A和B行都有错误D、A和B行都没有错误6、若有如下类定义,则下列叙述正确的是()。
class S{ int x;public:S ( ) {x=0;}S (int a) {x=++a;}void show( ) {cout<<”x=”<<x<<endl; }};int main(){ S s1=100;s1.show();return 0;}B、100C、101D、07、若有如下类定义,x的值是()。
class S{ int x;S (int a=0) {x=++a;}~S ( ) { };};int main( ){ S a (10);return 0;}A、0B、10C、11D、有语法错,得不到值8、假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为()。
实验1简单判定性问题求解一、实验学时完成本实验需4学时。
二、实验目的1、阅读程序题(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法;(2)掌握不同的类型数据之间赋值的规律;(3)掌握数据在内存中的存储方式;(4)学会输入、输出函数的基本格式和使用方法;(5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。
2、编程题(1)如何运用if-else判定性结构进行程序设计;(2)如何运用switch判定性结构进行程序设计。
3、调试题(1)熟悉C程序的编辑、编译、连接和运行的过程。
三、实验指导为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。
1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。
2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。
要注意简单判定性问题的结构选择。
3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。
对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。
四、实验内容1、阅读程序题(1)main( ){ /*定义字符型变量*/char c1,c2; /*向字符变量赋以整数*/c1=97;c2=98;printf("%c %c\n",c1,c2); /*以字符形式输出*/printf("%d %d\n",c1,c2); /*以整数形式输出*/}思考:可否改成int c1,c2;输出结果是?相同(2)main(){int a=7,b=5;printf("%d\n",b=b/a);}思考:若将printf语句中%d变为%f,可否输出分式的值?可以(3)main(){int a=9;a+=a-=a+a; /*包含复合的赋值运算符的赋值表达式*/printf("%d\n",a);}思考:赋值表达式a+=a-=a+a的求解步骤?第一步:a=a-(a+a)=-9 第二步a=a+a=18(4)main(){int k=-1;printf("%d,%u\n",k,k);}思考:-1在内存中的存储形式?取反加一11111111111111111111111111111111(32个)(5)main(){unsigned x1;int b=-1;x1=b; /*有符号数据传送给无符号变量*/printf("%u",x1);}(6)main(){int a=3,b=4,c=5;printf("%d\n",(!(a<b))&&(c=c+1));printf("%d",c);}思考:若将第一个1(换行)6(7)main(){ int a=1,b=2,c=3;if(c=a) ; printf("%d\n",c);else printf("%d\n",b);}2、编程序并上机调试运行(包括题目及要求、流程图、程序清单、测试数据及结果)(1)将一个百分制成绩转换成等级制成绩,百分制与等级制的对应具体要求如下:1)用switch语句实现该功能;2)用键盘输入百分制成绩,输入前要有提示信息,对于不合理的数据应输出错误信息;3)输出结果应包含百分制成绩和成绩等级;4)分别输入成绩-10,30,60,68,75,83,95,102,查看记录运行结果。
聊城大学计算机学院面向对象的程序设计第三次作业一、单选题(本大题共17小题,每题3分,共51分):1、在下列函数原型中,可以作为类AA构造函数的是()。
A void AA(int);B int AA( );C AA(int) const;D AA(int);2、下列选项中,哪一项功能是对对象进行初始化()。
A 析构函数B 数据成员C 构造函数D 静态成员函数3、假定A为类名,执行A x;语句时将自动调用该类的()。
A 有参构造函数B 无参构造函数C 拷贝构造函数D 赋值构造函数4、下列关于构造函数的说法,错误的是()。
A 系统可以提供默认的构造函数B 构造函数可以有参数,所以可以有返回值C 构造函数可以重载D 构造函数可以设置默认参数5、有如下类定义:class Point{int x, y;public:Point__________:x_(0), y_(0){}Point(int x, int y = 0):x_(x), y_(y){}};若执行语句:Point a(2), b[3], *c[4];则Point类的构造函数被调用的次数是()。
A 2次B 3次C 4次D 5次6、在下面的类定义中class sample{public:sample(int val); //①~sample( ); //②private:int a=2.5; //③public:sample( ); //④};其中错误的语句是()。
A ①B ②C ③D ④7、假定一个类的构造函数为A(int i = 4, int j = 0) { a = i; b = j;}则执行A x(1)语句后,x.a和x.b的值分别为()。
A 1和0B 1和4C 4和0D 4和18、下列关于构造函数的描述中,错误的是()。
A 构造函数可以设置默认参数B 构造函数在定义类对象时自动执行C 构造函数可以是内联函数D 构造函数不可重载9、下列选项中,哪一项不是构造函数的特征()。
20XX年复习资料大学复习资料专业:班级:科目老师:日期:实验前言(建议认真阅读)一、上机实验的目的上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解C++语言的基本结构和程序设计方法。
通过亲手编程掌握C++语言编程的方法。
二、实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了五个实验。
学生在课内机时先完成指导书中标有“*”号的程序,理解所学的知识,在此基础上再编写其他应用程序。
指导书中的五个个实验如下:1. 函数与编译处理2. 指针与引用3. 类和对象4. 继承和派生类5. 多态性三、实验提交(特别提醒)1. 实验题目以附件形式提交,每个附件限一个源程序,附件以实验编号-题号-自己学号.cpp命名;如学号为20XXXX20XXXX20XXXX34的同学提交实验1的第5题,则附件命名方式为:1-5-20XXXX20XXXX20XXXX34.cpp,错误提交的将视为未提交。
2. 提交时间定为该次实验课的一周内,过期不再接收。
四、评分和作弊处理1. 要求提交实验题总数为6题(带“*”号),占期末总评成绩的20XX%;2. 存在抄袭和被抄袭的作业,无论抄袭与被抄袭者,本门课程平时成绩以零分记。
存在两次及两次以上抄袭和被抄袭者,本门课程以不及格记。
五、实验课要求(重点强调)1. 严禁QQ、MSN等即时软件工具聊天;2. 严紧接听手机、发送短信;3. 严紧玩游戏。
实验1 函数与编译处理一、实验目的1. 掌握函数声明、定义和使用的方法;2. 掌握形参与实参之间的对应关系;3. 掌握函数调用时,形参、实参之间的“值传递”和“引用传递”的区别;4. 掌握函数递归调用的方法;5. 掌握全局变量、局部变量、静态变量的使用方法;6. 掌握文件包含的使用方法。
二、实验内容1. 定义两个函数swap1和swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是引用参数,在程序中分别调用这两个函数,其输出结果如下所示:初始值:x=1,y=2调用swap1后的结果:x=1 y=2调用swap2后的结果:x=2 y=12. 编写一个函数,用来计算从键盘上输入的整数的阶乘。
实验三循环控制实验课程名:高级语言程序设计(C)专业班级:学号:姓名:实验时间:实验地点:指导教师:一、实验目的和要求1. 熟练掌握用while语句、do while语句和for语句实现循环的方法。
2. 掌握在程序设计中用循的方法实现一些常用算法。
并进一步学习调试程序的方法。
二、实验内容1、任务名称程序c40101.c求1+…+100,填空,实现该功能。
(1、)源代码:#include<stdio.h>int main(){int s,i;s=0;for(i=1;i<=100;i++)s=s+i;printf("1+2+...+100=%d\n",s);return 0;}运行结果:(需要截图)(2、)源代码:#include<stdio.h>int main(){int s=0,i=1;while(i<=100){s+=i;i++;}printf("1+2+...+100=%d\n",s);return 0;}运行结果:运行结果分析:2、任务名称:分别运行这两个程序,若输入7,这两个程序的结果分别是多少?若输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区别?(1、)源代码:#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;while(i<=10){ sum+=i;i++;}printf("%d+...+10=%d\n",n,sum);}运行结果:(需要截图)(2、)源代码:#include <stdio.h>int main(){ int i,n,sum=0;scanf("%d",&i);n=i;do{ sum+=i;i++;} while(i<=10);printf("%d+...+10=%d\n",n,sum);return 0;}运行结果:运行结果分析:3、任务名称:下面程序,若输入12345,分析输出结果是多少?源代码:#include <stdio.h>void main( ){ long data;scanf("%ld",&data);while(data){ printf("%ld,",data%10);data=data/10;}}运行结果:(需要截图)运行结果分析:4、任务名称:程序c40104.c 实现求Fibonacci 数列的前n 个数。
太原工业学院计算机工程系return 0;}(3)使用带默认参数值的构造函数,不给定实参时,默认边长为1;注意——这个版本也只需要一个构造函数即可。
需要的测试函数是:int main(){Triangle Tri1; //定义边长为1 1 1的三角形类实例Tri1.showMessage();Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例Tri2.showMessage();Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例Tri3.showMessage();Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例Tri4.showMessage();return 0;}(4)在构造函数中使用参数初始化表对数据成员初始化。
这是一种更加提倡的写法。
测试函数同(1)。
【项目2-游戏中的角色类】(1)基于下面设计的游戏中角色类,补充完整需要的成员函数,使角色能一定的规则行动或改变状态。
下面代码中包含的是最基本的要求,可以根据你的设计进行扩充。
class Role{public:......private:string name;int blood;bool life;};int main(){Role mary;mary.setRole(“mary”,4);//设置角色的姓名为“mary”,血量为4mary.show();//显示mary.attack();//攻击别人,涨1个血mary.eat(2);//吃东西,涨2个血mary.beAttack();//被攻击,失1个血,血量为0死掉mary.beAttack();//被攻击,失1个血,血量为0死掉mary.show();//显示return 0;}(2)设计构造函数,使角色对象在创建时被初始化;设计析构函数,当角色对象被撤消时,提示一句“XXX(名称)退出江湖…”。
实验三构造函数和析构函数参考答案班级:学号:姓名:成绩:一.实验目的1.理解构造函数和析构函数作用;2.掌握各种类型的构造函数和析构函数的使用;3.掌握构造函数和析构函数的调用顺序。
二.使用的设备和仪器计算机+Windows XP +Visual C++6.0三.实验内容及要求1.阅读程序,写出运行结果,然后上机运行,将得到的运行结果与前面的结果进行比较。
最后要求对每一行输出进行分析。
(1)#include <iostream>using namespace std;class MyClass{public:MyClass();MyClass(int xx);MyClass(int xx,int yy);MyClass(MyClass &);void Display();void Set(int, int);~ MyClass();private:int x,y;};MyClass:: MyClass(){cout<<"执行无参构造函数:" ;x=0;y=0;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx){cout<<"执行一个参数构造函数:" ;x=xx;y=0;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx,int yy){cout<<"执行两个参数构造函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(MyClass &a){cout<<"执行复制构造函数:" ;x=a.x;y=a.y;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Display(){cout<<"执行显示函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Set(int xx=0,int yy=0){cout<<"执行设置函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: ~MyClass (){cout<<"执行析构函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void main(){MyClass a(12,34);a.Set(20);a.Display();MyClass b(a);b.Display();MyClass c;MyClass d(222);{MyClass e(788,453);d.Display();}c.Display();}运行结果:执行两个参数构造函数:x=12y=34 //主函数第一行,定义对象a,调用带两个参数的构造函数执行设置函数:x=20y=0 //主函数第二行,通过对象a调用成员函数Set(int, int)执行显示函数:x=20y=0 //主函数第三行,通过对象a调用成员函数Display()执行复制构造函数:x=20y=0 //主函数第四行,用已有对象a初始化对象b,调用复制构造函数执行显示函数:x=20y=0 //主函数第五行,通过对象a调用成员函数Display()执行无参构造函数:x=0y=0 //主函数第六行,定义对象c,调用不带参数的构造函数执行一个参数构造函数:x=222y=0 //主函数第七行,定义对象d,调用带一个参数的构造函数执行两个参数构造函数:x=788y=453 //主函数第九行,定义对象e,调用带两个参数的构造函数执行显示函数:x=222y=0 //主函数第十行,通过对象d调用成员函数Display()执行析构函数:x=788y=453 //主函数第十一行,撤销对象e,调用析构函数执行显示函数:x=0y=0 //主函数第十二行,通过对象c调用成员函数Display()执行析构函数:x=222y=0 //主函数结束,撤销对象d,调用析构函数执行析构函数:x=0y=0 //主函数结束,撤销对象c,调用析构函数执行析构函数:x=20y=0 //主函数结束,撤销对象b,调用析构函数执行析构函数:x=20y=0 //主函数结束,撤销对象a,调用析构函数Press any key to continue(2)#include<iostream>using namespace std;class A{public:A(int x=100,double y=1.2){a=x;b=y;}void show(char *pt){ cout<<pt<<":"<<endl;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;}private:int a;double b;};void main(){A obj1,obj2(100,3.5);obj1.show("obj1");obj2.show("obj2");A *p;p=&obj1;p->show("p->obj1");(*p).show("(*p)obj1");p=&obj2;p->show("p->obj2");(*p).show("(*p)obj2");p=new A;p->show("p->new");delete p;}运行结果:obj1: //主函数第二行通过对象obj1调用成员函数show()a=100b=1.2obj2: //主函数第三行通过对象obj2调用成员函数show()a=100b=3.5p->obj1: //主函数第六行通过指向对象的指针p调用成员函数show(),p指向对象obj1 a=100b=1.2(*p)obj1: //主函数第七行通过指向对象的指针p调用成员函数show(),p指向对象obj1 a=100b=1.2p->obj2: //主函数第九行通过指向对象的指针p调用成员函数show(),p指向对象obj2 a=100b=3.5(*p)obj2: //主函数第十行通过指向对象的指针p调用成员函数show(),p指向对象obj2 a=100b=3.5p->new: //主函数第十二行通过动态创建的对象指针p调用成员函数show()a=100b=1.2Press any key to continue(3)#include <iostream>using namespace std;class Complex{public:Complex();Complex (double x, double y);Complex (Complex & c);~ Complex ();double GetRel() { return rel;}double GetImg() { return img;}private:double rel, img;};Complex::Complex(){rel=0; img=0;cout<<"缺省构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::Complex(double x, double y){rel=x; img=y;cout<<"构造函数被调用: ("<<rel<<","<<img<<")"<<endl; }Complex::Complex(Complex & c){rel = c.rel;img = c.img;cout<<"复制构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::~ Complex (){cout<<"析构函数被调用: ("<<rel<<","<<img<<")"<<endl; }//函数定义Complex fun(Complex c){cout<<"在函数fun()中."<<endl;double x, y;x=c.GetRel()*10;y=c.GetImg()+100;Complex temp(x, y);return temp;}void main(){Complex c1(6.8, 98.23),c2;c2=fun(c1);cout<<"c2=("<<c2.GetRel()<<",";cout<<c2.GetImg()<<")"<<endl;}运行结果:构造函数被调用: (6.8,98.23) //主函数第一行,定义对象c1,调用带两个参数的构造函数缺省构造函数被调用: (0,0) //主函数第一行,定义对象c2,调用不带参数的构造函数复制构造函数被调用: (6.8,98.23) //主函数第二行,调用函数fun(),实参c1初始化形参c,调用复制构造函数在函数fun()中. //frn()函数的第一行构造函数被调用: (68,198.23) //fun()函数第五行,定义对象temp,调用带两个参数的构造函数复制构造函数被调用: (68,198.23) //fun()函数结束,创建临时对象将返回值带到主函数中析构函数被调用: (68,198.23) // fun()函数结束,析构对象temp析构函数被调用: (6.8,98.23) // fun()函数结束,析构开参对象c析构函数被调用: (68,198.23) //临时对象被析构c2=(68,198.23) //主函数中的第三、第四行析构函数被调用: (68,198.23) //主函数结束,析构对象c2析构函数被调用: (6.8,98.23) //主函数结束,析构对象c1Press any key to continue2.定义一个score类,其中包括私有数据成员和公有成员函数,即num 学号Math 高等数学成绩English 英语成绩Programming 程序设计成绩Inscore()计算平均成绩并输出showscore()输出学号和各科成绩score( ) 构造函数有两个,分别带有参数和不带参数两种。
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
实验五构造函数与析构函数5.1 实验目的1.理解掌握构造函数的定义和作用;2.掌握构造函数的使用;3.理解掌握拷贝构造函数的定义和使用;4.理解掌握构造函数的重载;5.理解掌握析构函数的定义和使用。
5.2 实验内容5.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。
#include <iostream>#include <string>using namespace std;class CPerson{public:void Print();private:CPerson();private:int age;string name;};CPerson::CPerson(){}void CPerson::Print(){cout<<"name="<<name<<",age="<<age<<endl;}void main(){CPerson ps(23,"张三");ps.Print();}问题一:在不改变主函数体内容的前提下,试改正该程序,使其输出name=张三,age=23,试描述错误原因。
答:【修改地方用蓝色标注】①主函数的返回类型不能为void,应改为int.②主函数中构造一个对象,调用的构造方法并没有在类体中实现,所以应该修改类体中的默认构造方法。
正确代码如下。
③类体中构造方法成了私有类型,应修改为public类型。
5.2.2 程序设计1.设计实现一个CPoint类,满足以下要求:a.该类包含两个整型成员变量x(横坐标)和y(纵坐标),以及一个输出函数Print()用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量;b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0;c.可以采用直接输入参数的方式来初始化该类的成员变量;d.设计一个有输出的析构函数;测试结果:5.3 实验总结。
实验三构造函数和析构函数班级:B135A2 学号: 201322688 姓名:杨弘成绩:一.实验目的1.理解构造函数和析构函数作用;2.掌握各种类型的构造函数和析构函数的使用;3.掌握构造函数和析构函数的调用顺序。
二.使用的设备和仪器计算机+Windows XP +Visual C++6.0三.实验内容及要求1.阅读程序,写出运行结果,然后上机运行,将机器运行结果与人工运行的结果进行比较,并对每一行输出做出分析。
(1)#include <iostream>using namespace std;class MyClass{public:MyClass();MyClass(int xx);MyClass(int xx,int yy);MyClass(MyClass &);void Display();void Set(int, int);~ MyClass();private:int x,y;};MyClass:: MyClass(){cout<<"执行无参构造函数:" ;x=0;y=0;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx){cout<<"执行一个参数构造函数:" ;x=xx;y=0;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(int xx,int yy){cout<<"执行两个参数构造函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: MyClass(MyClass &a){cout<<"执行复制构造函数:" ;x=a.x;y=a.y;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Display(){cout<<"执行显示函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void MyClass:: Set(int xx=0,int yy=0){cout<<"执行设置函数:" ;x=xx;y=yy;cout<<"x="<<x<<"y="<<y<<endl;}MyClass:: ~MyClass (){cout<<"执行析构函数:" ;cout<<"x="<<x<<"y="<<y<<endl;}void main(){MyClass a(12,34);a.Set(20);a.Display();MyClass b(a);b.Display();MyClass c;MyClass d(222);{MyClass e(788,453);d.Display();}c.Display();}(2)#include<iostream>using namespace std;class A{public:A(int x=100,double y=1.2){a=x;b=y;}void show(char *pt){ cout<<pt<<":"<<endl;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;}private:int a;double b;};void main(){A obj1,obj2(100,3.5);obj1.show("obj1");obj2.show("obj2");A *p;p=&obj1;p->show("p->obj1");(*p).show("(*p)obj1");p=&obj2;p->show("p->obj2");(*p).show("(*p)obj2");p=new A;p->show("p->new");delete p;}(3)#include <iostream>using namespace std;class Complex{public:Complex();Complex (double x, double y);Complex (Complex & c);~ Complex ();double GetRel() { return rel;}double GetImg() { return img;}private:double rel, img;};Complex::Complex(){rel=0; img=0;cout<<"缺省构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::Complex(double x, double y){rel=x; img=y;cout<<"构造函数被调用: ("<<rel<<","<<img<<")"<<endl; }Complex::Complex(Complex & c){rel = c.rel;img = c.img;cout<<"复制构造函数被调用: ";cout<<"("<<rel<<","<<img<<")"<<endl;}Complex::~ Complex (){cout<<"析构函数被调用: ("<<rel<<","<<img<<")"<<endl; }//函数定义Complex fun(Complex c){cout<<"在函数fun()中."<<endl;double x, y;x=c.GetRel()*10;y=c.GetImg()+100;Complex temp(x, y);return temp;}void main(){Complex c1(6.8, 98.23),c2;c2=fun(c1);cout<<"c2=("<<c2.GetRel()<<",";cout<<c2.GetImg()<<")"<<endl;}2.在实验二第2题中使用构造函数和对象数组,完成多个歌手的报名、显示、查询和修改等功能。
3.定义数组类,并定义该类对象实现各种操作。
➢数组的属性:长度、元素➢数组基本操作:添加、查询、删除、排序、插入功能。
➢参考的程序框架:const int MaxSize=10;class Array_int{private:int length;int data[MaxSize];public:Array_int();//相当于初始化操作,一个空数组,长度为0Array_int(int a[],int n);//用给定的长度为n的数组a初始化数据成员void Display();//显示所有数组元素void Insert(int x);//将给定的元素x插入到数组中后,仍保持数组的有序性;需要判断插入新元素会不会发生存储空间的溢出情况,若发生溢出提示插入操作失败;插入过程中,插入位置确定后,从插入位置至最后一个元素全部往后移一位,给新插入元素空出插入位置。
void Delete(int x);//从数组中删除指定元素x,后面的元素全部要往前移一位;做删除前需要判断数组是否为空,若为空表,则删除操作失败int Search(int x);//从数组中查找指定元素x,若查找成功返回元素在数组中位置,查找失败返回特定值-1};四.实验步骤编写程序+编译+连接+运行+分析结果/*2.在实验二第2题中使用构造函数和对象数组,完成多个歌手的报名、显示、查询和修改等功能。
*//*定义一个中国好声音歌手类。
其中包括每个歌手的名字、年龄、来自哪个省份、所唱的曲目等。
可以实现报名、显示、修改等功能。
*/#include<iostream>#include<string>#include<iomanip>#include<stdlib.h>#define N 3using namespace std;class Singer{private:string Name;int Age;string Province;string Song;public:Singer(){cout<<"调用Singer构造函数。
"<<endl;}~Singer(){cout<<"调用Singer析构函数。