㈡ 知识应用实验
1.分析下列程序,写出程序的输出结果,再上机运行程序验证其正确性,如果不正确,请认真分析出错原因。
程序3(exp_203.cpp)
#include
class Myclass
{ private:
int a,b;
public:
Myclass(int x1=0,int x2=0)
{a=x1;b=x2;
cout<<\构造函数被调用!\
}
~Myclass()
{cout<<\析构函数被调用!\
Myclass(Myclass &ob)
{ a=ob.a;b=ob.b;
cout<<\拷贝构造函数被调用!\ } void print(void) { cout<<\ b=\};
void func1(Myclass ob) { cout<<\ ob.print(); }
void func2(Myclass *ob) { cout<<\ ob->print(); }
void func3(Myclass &ob) { cout<<\ ob.print(); }
void main()
{ Myclass ob(10,10);
cout<<\ cout<<\调用func1:\ func1(ob);
cout<<\调用func2:\ func2(&ob);
cout<<\调用func3:\ func3(ob);
你分析的程序输出结果是: 构造函数被调用! Main:a=10 b=10 调用func1: 拷贝构造函数被调用! Func1: a=10 b=10 析构函数被调用! 调用func2: Func2: a=10 b=10 调用func3: Main:a=10 b=10 析构函数被调用! 程序的实际输出结果是: 构造函数被调用! Main:a=10 b=10 调用func1:
拷贝构造函数被调用! Func1: a=10 b=10 析构函数被调用! 调用func2:
Func2: a=10 b=10 调用func3: Main:a=10 b=10 析构函数被调用!
cout<<\}
2.完善、调试通过下列程序,并按所要求回答问题。 程序4(exp_204.cpp)
#include
char *name; public: person(char *pn);//构造函数声明 ~person(void); //析构函数声明 person(const person &ob);//拷贝构造函数声明 char *get_name(void) { return name;} void print_name(void); };
① ::person(char *pn) //定义构造函数,为name提供值 { name= ② ; if(name!=NULL) ③ ; }
① ::~person(void)//显示定义析构函数 { delete []name; }
① ::person(const person &ob) //定义拷贝构造函数 { name= ④ ; if(name!=NULL) ⑤ ; }
void person::print_name(void) {cout< void main(void) { person p1(\张三\ person p2=p1; cout<<\姓名:\ cout<<\姓名:\} 问题: ⑾ 程序中①处应为 person ; ②处应为 new char[strlen(pn)+1]; ; ③处应为 strcpy(name,pn); ; ④处应为 new char[strlen(ob.name)+1]; ; ⑤处应为 strcpy(name,ob.name); ; 程序5(exp_102.cpp) //头文件“hscore.h”内容:定义一个成绩类:最多可以处理10科成绩及平均成绩 const int M=10; class score { private: float sc[M],aver; //表示M科成绩的数组及平均成绩 int m; //表示实际考试科数 public: score(void); //无参构造函数 score(float x[],int n); //构造函数重载——初始化成绩 void set_score(float x[],int n); //提供成绩 float get_score(int i) //得到第i科成绩 {return sc[i];} float get_aver(void) //得到平均成绩 {return aver;} void print_score(void); }; score::score(void) //无参构造函数 { int i; m=M; for(i=0;i score::score(float x[],int n) //构造函数重载——初始化成绩 { int i;float sum=0; m=n; ① ; aver=sum/m; } void score::set_score(float x[],int n) //提供成绩 { int i;float sum=0; m=n; ② ; aver=sum/m; } void score::print_score(void) //输出成绩、平均成绩 { int i; for(i=0;i cout<<\ \ cout<<\ \ } 问题: ⑿ 完善类的定义,程序中,①处应改为: for(i=0,i //程序“exp_205.cpp”:用成绩类“score”处理成绩:任意个学生,任意科(不超过10科) #include #include\调入成绩score类的定义头文件 void input(score *p,int n,int m); //普通函数:输入学生成绩 void print(score *p,int n,int m); //普通函数:输出学生成绩 score &average(score *p,int n,int m); //普通函数:平均成绩计算 void sort(score *p,int n,int m);//普通函数:按平均成绩排序 void main(void) { int n,m; cout<<\学生人数:\ cout<<\考试科数:\ score *p,aver; p= ① ; //动态数组:用于处理n个学生成绩 if(p==NULL) { cout<<\内存分配失败!\ return ; } input( ② ); //调用输入成绩函数 print( ② ); //调用输出成绩函数 aver=average( ② ); //调用平均值计算函数 aver.print_score(); //输出各科平均成绩 sort ② ); //成绩排序 print( ② ); //调用输出成绩函数 ③ ; //释放内存 } void input(score *p,int n,int m) { int i,j;float x[M]; for(i=0;i { cout<<\第\个学生成绩:\ for(j=0;j
相关推荐: