C++实验三 构造函数和析构函数题目+答案
构造函数和析构函数习题
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];”语句时,自动调用该类构造函数的次数为()。
C实验报告答案完整版
实验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,查看记录运行结果。
聊城大学计算机学院面向对象的程序设计(c++)练习题(第三周)(构造函数和析构函数)
聊城大学计算机学院面向对象的程序设计第三次作业一、单选题(本大题共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、下列选项中,哪一项不是构造函数的特征()。
大学C 上机实验题目(版)
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语言实验报告三答案(完整版)
实验三循环控制实验课程名:高级语言程序设计(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 个数。
c++实验报告二(构造函数、析构函数)
太原工业学院计算机工程系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(名称)退出江湖…”。
C++实验三 构造函数和析构函数题目+答案
void Insert(int x);//将给定的元素x插入到数组中后,仍保持数组的有序性;需要判断插入新元素会不会发生存储空间的溢出情况,若发生溢出提示插入操作失败;插入过程中,插入位置确定后,从插入位置至最后一个元素全部往后移一位,给新插入元素空出插入位置。
(*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);
a.Set(20);
a.Display();
MyClassb(a);
b.Display();
MyClass c;
MyClass d(222);
{
MyClass e(788,453);
d.Display();
}
c.Display();
}
(2)
#include<iostream>
using namespace std;
~ MyClass();
private:
int x,y;
};
MyClass:: MyClass()
{
cout<<"执行无参构造函数:";
x=0;y=0;
cout<<"x="<<x<<"y="<<y<<endl;
实验三 构造函数和析构函数 - 参考答案
实验三构造函数和析构函数参考答案班级:学号:姓名:成绩:一.实验目的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( ) 构造函数有两个,分别带有参数和不带参数两种。
C语言实验报告 实验三 参考答案
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)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 实验总结。
C 网络作业答案
} int f( ) {
MyClass *ptr = new MyClass(45); _____________ }
A) MyClass(50) B) SetNum(50) C) ptr->SetNum(50) D) ptr->n = 50
private 数据成员不允许被非成员函数直接调用,所以 D)错
void main() { Point p(12,-3,4);
cout << "p = "; p.print(); cout << ", p.norm() = " << p.norm() << endl; p.negate(); cout << "p = "; p.print(); cout << ", p.norm() = " << p.norm() << endl; }
类的析构函数是在类对象被释放的时候自动调用的,它的作用是释放一个对象。在对
象删除前,用它来做一些清理工作。
3. 假定 MyClass 为一个类,则该类的拷贝初始化构造函数的声明语句为___[3]___ 。C
A)MyClass&(MyClass x); B)MyClass(MyClass x)
C)MyClass(MyClass& x); D)MyClass(MyClass *x)
注意:它的形参是一个引用。
4.假定 MyClass 为一个类,则执行 MyClass a,b(2),*p;语句时,自动调用该类构造函数_[4]
次。A
A)2
B)3
C++程序设计实践案例教程项目3 构造函数和析构函数
6.构造类成员
当一个类的对象作为另外一个类的数据成员存在时,我们称这个数据成员为类 成员,或者成员对象。
在一个程序中,各个对象被构造的规则如下:
(1)局部和静态对象,以声明的顺序构造
(2)静态对象只被构造一次 (3)所有的全局对象都在主函数main()之前被构造 (5)全局对象构造时无特殊顺序 (6)成员以其在类中声明的顺序构造
public:
int a; float b; A() //构造函数内部赋值 { a = 0; b = 9.9; }
};
初始化列表的构造函数和内部赋值的构造函数对内置类型的成员没有什么大的区 别,像上面的任一个构造函数都可以。
用构造函数的初始化列表来进行初始化,写法方便、简练,尤其当需要初始化 的数据成员较多时更显其优越性。对非内置类型成员变量,推荐使用类构造函 数初始化列表。 但有的时候必须用带有初始化列表的构造函数,例如下面的两种情况:
3.3 习题及解析 3.4 思考题 58
基础知识
构造函数
程序中的数据需要初始化才能使用,最好的方法是通过构造函数来进行初始化, 类的构造函数由编译器自动调用,而不是由程序员调用。
构造函数承担的任务是:实例(对象)的生成与初始化。构造函数是类中的一 种特殊函数,当一个类对象被创建时自动被调用。构造函数用于初始化数据成 员和执行其它与创建对象有关的合适的处理过程。
4.构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。 例如: class A { public: int a; float b; A(): a(0),b(9.9) {} //构造函数初始化列表 }; class A {
c实验答案——精选推荐
第一次实验类与对象定义矩形类Rectangle,该类有length、width、area三个数据成员,保存矩形的长宽。
定义矩形类的构造函数、复制构造函数、析构函数,计算并返回面积函数calarea(),显示Rectangle类数据成员的show()函数。
在主函数中建立Rectangle对象加以验证。
#include<iostream>using namespace std;class Rectangle{int length,width,area;public:Rectangle(int l=0,int w=0);Rectangle(Rectangle& rr);~Rectangle();int calarea();void show();};Rectangle::Rectangle(int l,int w){length=l;width=w;area=length*width;}Rectangle::Rectangle(Rectangle& rr){length=rr.length;width=rr.width;area=length*width ;}Rectangle::~Rectangle(){}int Rectangle::calarea(){return length*width;}void Rectangle::show(){cout<<"长宽分别是:"<<length<<","<<width<<endl;}int main(){Rectangle r1(3,4),r2,r3(r1);cout<<"面积="<<r1.calarea()<<endl;cout<<"面积="<<r2.calarea()<<endl;cout<<"面积="<<r3.calarea()<<endl;r1.show();r2.show();r3.show();return 0;}建立一个分数类Fraction,其数据成员包括分子nume和分母deno。
C++实验三构造函数与析构函数
实验三构造函数与析构函数1、实验目的:1)掌握构造函数和析构函数定义方法;2)掌握构造函数的重载、具有默认值的构造函数的使用方法;3)加深对构造函数的特殊用途的理解。
2、实验内容:2.1 分析程序指出程序运行的结果:1)p106 3.15程序代码:运行结果:2)分析下面程序中的对象传递,写出输出结果。
#include<iostream.h>Using std::cout;Using std::endl;class Cylinder{public:Cylinder(){}Cylinder(double r,double h);void setcylinder(double r,double h);double getradius(){return radius;}double getheight(){return height;}double volume();double surface_area();private:double radius;double height;};const double PI=3.1415926;Cylinder::Cylinder(double r,double h){radius=r;height=h;}void Cylinder::setcylinder(double r,double h){radius=r;height=h;}double Cylinder::volume(){double vol;vol=PI*radius*radius*height;return vol;}double Cylinder::surface_area(){double area;area=2*PI*radius*height+2*PI*radius*radius;return area;}void main(){Cylinder cylinder1(7.0,12.0),cylinder2;cylinder2.setcylinder(12.3,18.7);cout<<"the radius of cylinder1 is:\t"<<cylinder1.getradius()<<endl;cout<<"the height of cylinder1 is:\t"<<cylinder1.getheight()<<endl;cout<<"the volume of cylinder1 is:\t"<<cylinder1.volume()<<endl;cout<<"the surfacearea of cylinder1 is:\t"<<cylinder1.surface_area()<<endl; cout<<"the radius of cylinder2 is:\t"<<cylinder2.getradius()<<endl;cout<<"the height of cylinder2 is:\t"<<cylinder2.getheight()<<endl;cout<<"the volume of cylinder2 is:\t"<<cylinder2.volume()<<endl;cout<<"the surfacearea of cylinder2 is:\t"<<cylinder2.surface_area()<<endl;}运行结果:3)分析下面的程序,指出程序的错误。
c课后习题解答
第6章;类和对象(一)练习题66.1判断题×1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。
×2.类中的成员函数都是公有的,数据成员都是私有的。
×3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。
√4.类定义后,它的成员个数及名称就不会再被改变了。
×5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。
如果类中没有定义任何构造函数时,就无法给定义的对象初始化。
√6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。
√7.对象成员的表示方法与结构变量成员的表示方法相同。
√8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。
√9.构造函数是一个其名与类名相同的特殊的成员函数。
×10.析构函数是一个函数体为空的成员函数。
√11.构造函数和析构函数都是系统自动调用的成员函数。
×12.构造函数和析构函数都可以重载。
√13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。
×14.静态成员是指静态对象的成员。
×15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。
√16.静态成员都可以使用类名加作用域运算符的方法来引用。
×17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。
√18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。
×19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。
√20.常对象需要引用常成员函数,而不能引用非常成员函数。
×21.常对象的数据成员都是常数据成员。
√22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。
×23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。
构造函数和析构函数
构造函数和析构函数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<<=""> };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、10D、有语法错,得不到值8、假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为()。
构造函数(含答案)
构造函数常见构造函数方法:1.利用和差函数求导法则构造(1))()()()0(0)()(x g x f x F x g x f +=⇒<>'+'或; (2))(-)()()0(0)(-)(x g x f x F x g x f =⇒<>''或; (3)kx x f x F k x f -=⇒<>')()()(k )(或; 2.利用积商函数求导法则构造(1))()()()0(0)()()(g )(x g x f x F x g x f x x f =⇒<>'+'或; (2))0)(()(g )()()0(0)()(-)(g )(≠=⇒<>''x g x x f x F x g x f x x f 或; (3))()()0(0)()(x x xf x F x f x f =⇒<>+'或; (4))0(x)()()0(0)(-)(x ≠=⇒<>'x x f x F x f x f 或; (5))()()0(0)(n )(x x f x x F x f x f n=⇒<>+'或; (6))0(x)()()0(0)(n -)(x n ≠=⇒<>'x x f x F x f x f 或; (7))(e )()0(0)()(x f x F x f x f x=⇒<>+'或; (8))0(e )()()0(0)(-)(x≠=⇒<>'x x f x F x f x f 或; (9))(e )()0(0)(k )(x f x F x f x f kx=⇒<>+'或; (10))0(e)()()0(0)(k -)(k x≠=⇒<>'x x f x F x f x f 或; (11))(sin )()0(0tanx )()(x xf x F x f x f =⇒<>'+或;(12))0(sin sinx )()()0(0tan )(-)(≠=⇒<>'x x f x F x x f x f 或; (13))0(cos cos )()()0(0)(tanx )(≠=⇒<>+'x xx f x F x f x f 或; (14))(cos )()0(0)(tanx -)(x f x F x f x f =⇒<>'或;(15)()+lna ()0(0)()()xf x f x F x a f x '><⇒=或;(16)()()lna ()0(0)()x f x f x f x F x a '-><⇒=或;考点一。
C++课程实践报告试题及答案
任务一一、实践任务1.试建立一个类PP ,求出下列多项式的前n 项的值。
⎪⎩⎪⎨⎧---=-n x P n x xP n x x P n n /))()1()()12((1)(2n 1- 110>==n n n二、详细设计1、类的描述与定义(1)私有数据成员● int n :前若干项的项数。
● double x :存放x 的值。
● double *p :根据n 的大小动态申请存放P n (x) 前n 项的数组空间。
(2)公有成员函数● PP(int num,double x1):构造函数,初始化数据成员n 和x ,使p 指向动态申请的数组空间。
● ~PP ():析构函数,释放p 指向的动态内存空间。
● double fun(int n1,double x):递归函数,用于求多项式)(x P n 的第n1项。
注意:将递归公式中的n 用作函数参数。
本函数供process 函数调用。
● void process( ):完成求前n 项的工作,并将它们存放到p 指向的动态数组中。
● void show( ):输出n 和x ,并将前n 项以每行4个数的形式输出到屏幕上。
2、主要函数设计在主函数中完成对该类的测试。
先输入num 和x1,并定义一个PP 类的对象items ,用num 和x1初始化items 的成员n 和x ,调用items 的成员函数,求出并输出多项式前num 项的值。
三、源程序清单#include<iostream.h>class PP{private:i nt n;d ouble x;d ouble*p;public:P P(int num,double x1){n=num;x=x1;p=new double[n];}~PP(){if(p) delete []p;}d ouble fun(int n1,double x);v oid process();v oid show();};double PP::fun(int n1,double x){if(n1==0) return 1;else if(n1==1) return x;else if(n1>1) return ((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; }void PP::process(){for(int i=0;i<n;i++){p[i]=fun(i,x);}}void PP::show(){cout<<"n="<<n<<endl<<"x="<<x<<endl;for(int i=0;i<n;i++){cout<<p[i]<<'\t'<<'\t';if((i+1)%4==0) cout<<endl;}}void main(){int num;double x1;cout<<"请输入num和x1:";cin>>num>>x1;PP items(num,x1);items.process();items.show();}任务二一、实践任务2.试建立一个类SP ,求kk k k n k n f ++++=....321),(,另有辅助函数power(m,n)用于求n m 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三构造函数和析构函数班级: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析构函数。