第一范文网 - 专业文章范例文档资料分享平台

《面向对象程序设计》实验指导书(实验二)

来源:用户分享 时间:2025/5/16 17:22:22 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

㈡ 知识应用实验

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 #include class person { private:

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

《面向对象程序设计》实验指导书(实验二).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2nnwz1h0b51is530734p_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top