《面向对象方法与C++》作业.docx

上传人:b****3 文档编号:4889128 上传时间:2022-12-11 格式:DOCX 页数:15 大小:19.65KB
下载 相关 举报
《面向对象方法与C++》作业.docx_第1页
第1页 / 共15页
《面向对象方法与C++》作业.docx_第2页
第2页 / 共15页
《面向对象方法与C++》作业.docx_第3页
第3页 / 共15页
《面向对象方法与C++》作业.docx_第4页
第4页 / 共15页
《面向对象方法与C++》作业.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《面向对象方法与C++》作业.docx

《《面向对象方法与C++》作业.docx》由会员分享,可在线阅读,更多相关《《面向对象方法与C++》作业.docx(15页珍藏版)》请在冰豆网上搜索。

《面向对象方法与C++》作业.docx

《面向对象方法与C++》作业

《面向对象方法与C++》作业

一、填空题

1.若char*string=”test”;则如果要输出指针值,正确的语句是。

2.在重载“[]”运算符时,必须使用函数重载。

3.当用public继承时,基类的public成员成为派生类的成员,基类的protected成员成为派生类的成员。

4.可以赋给指针的唯一整数是。

5.在重载“=”运算符时,必须使用函数重载。

6.以下程序:

intc=10;

cout.flags(ios:

:

hex|ios:

:

showbase);

cout<

的输出结果是。

7.当用private继承时,基类的public成员和protected成员都将成为派生类的成员。

8.在main函数中出现的以下语句:

max=Max(a,Max(b,c));是一个函数调用的语句。

9.头文件声明和定义了重要的文件处理操作服务。

10.关键字表示类的静态成员。

11.当一个成员函数定义在类的声明外部时,函数名之前要加上名称和运算符。

12.在C++中,虚基类的引入是为了实现继承。

二、判断题

1.在以下语句中:

cin>>XXXX;

XXXX必须是一个变量名,而不能是一个任意表达式。

()

2.以下声明将不会导致编译错误。

()

enumGradeType{'A','B','C','D','E','F'};

3.在C++里,派生类的构造函数先于其基类的构造函数执行。

()

4.C++中的所有函数都是传值调用。

()

5.在类time中声明如下的函数原型:

void~time();()

6.以下程序:

classCA

{public:

virtualvoiddis()=0;};

classCB:

publicCA

{public:

voidset(intm){k=m;}

protected:

intk;

};

voidmain()

{CBb;}

是正确的。

()

7.函数模板能够定义一个在不同数据类型基础上完成同一任务的函数。

()

8.以下语句:

char*string=”test”;

delete[]string;是正确的。

()

9.一个有指针数据成员的类必须要包含的成员函数有:

初始化构造函数,析构函数,拷贝构造函数和赋值运算符函数。

()

10.抽象基类中的所有虚函数都要声明为纯虚函数。

()

11.以下语句:

char*string=newchar[10];

strcpy(string,”test”);//…

delete[]string;是正确的。

()

12.枚举类型变量的值可以直接进行输入、输出。

()

三、读程题

1.下面程序在执行过程中,若顺序输入十个整数:

12345678910,其结果是什么。

#include

classstack;

classnode{

intdata;

node*prev;

public:

node(intd,node*n){data=d;prev=n;}

friendclassstack;

};

classstack{

node*top;

public:

stack(){top=0;}

voidpush(inti){

node*n=newnode(i,top);top=n;}

intpop(){

node*t=top;

if(top){

top=top->prev;intc=t->data;

deletet;returnc;}

return0;}

};

voidmain(){

intc;stacks;

for(inti=0;i<10;i++)

{cin>>c;s.push(c);}

for(i=0;i<10;i++)

cout<

cout<

 

2.

#include

#include

classIncrement{

public:

Increment(int=0,int=1);

voidaddIncrement()

{count+=increment;}

voidprint()const;

private:

intcount;

constintincrement;};

Increment:

:

Increment(intc,inti):

increment(i)

{count=c;}

voidIncrement:

:

print()const{

cout<<"count="<

cout<<"increment="<

voidmain(){

Incrementobject(65,7);

cout<<"before:

"<

object.print();

for(intj=0;j<3;j++){

object.addIncrement();

cout<<"after:

"<

object.print();}}

3.

#include

classpoint{

staticintcount;

floatxcoord,ycoord;

public:

point(floatx=0,floaty=0)

{xcoord=x;ycoord=y;count++;}

staticintgetcount()

{returncount;}

~point()

{count--;}};

intpoint:

:

count=0;

voidmain(){

cout<

:

getcount()<<"";

point*p,a(32.98,-4.71),b,c;

cout<

:

getcount()<<"";

cout<

p=newpoint[100];

cout<

:

getcount()<<"";

delete[]p;

cout<

:

getcount()<

4.

#include

classTest{

staticintcount;

public:

Test(){++count;}

~Test(){--count;}

staticintgetCount(){returncount;}};

intTest:

:

count=0;

voidmain(){

cout<

:

getCount();

Testt,tab[5],*p;

cout<<'\t'<

:

getCount();

p=newTest[10];

cout<<'\t'<

:

getCount();

delete[]p;

cout<<'\t'<

:

getCount()<

5.

#include

#include

templateclassvector{

T*v;intsz;

public:

vector(ints=100){

v=newT[sz=s];}

vector(constvector&vv){

sz=vv.sz;v=newT[sz];}

vector&operator=(constvector&vv){

if(&vv!

=this){

delete[]v;

sz=vv.sz;

v=newT[sz];

for(inti=0;i

v[i]=vv.v[i];}

return*this;}

~vector(){delete[]v;}

T&operator[](inti){

if(i<0||i>=sz){cerr<<"Error\n";exit

(1);}

returnv[i];}};

voidmain(){

vectorv(10),u(v);

for(inti=0;i<10;i++)

v[i]=3*i+1;

u=v;

for(i=0;i<=10;i++)

cout<

四、编程题

1.请完成以下程序:

设计一个学生类,其属性有学号、姓名、性别、年龄和C++成绩,并定义相应操作,重载析取符(>>)和插入符(<<)以支持I/O操作。

在main函数中定义学生对象数组,对于学生对象数组从磁盘文件“student.txt”进行输入,最后以学号n为参数在数组中查找学号为n的学生,并显示该生的全部信息。

#include<_____1_____>

#include

#include

classstudent{

_____2_____;

charname[20],sex;

intage;

floatscore;

public:

student(){}

student(intnu,char*na,charse,intag,_____3_____sc){

num=nu;strcpy(name,na);

sex=se;age=ag;score=sc;}

intgetn(){

returnnum;}

friendistream&operator>>(istream&s,student&st){

s>>st.num>>st.name>>st.sex>>st.age>>st.score;

return_____4_____;}

friendostream&operator<<(_____5_____s,conststudent&st){

s<

""<

returns;}};

constintm=300;

_____7_____main(){

students[m];

ifstreamf("____8_____");

inti=0;

while(!

f.eof())

f>>s[__9__];

intn,flag=1;

cout<<"Entern:

";

_____10_____;

for(intj=0;j

if(s[j].getn()==n){flag=0;cout<<"找到了:

"<

if(flag==1)cout<<"没找到。

\n";

}

2.请完成以下复数类的设计,复数类对象的创建及使用。

#include<____1____>

#include

#include

classcomplex{

doublerpart,ipart;

doubleabs()const;

doublenorm()const;

public:

complex(doubler=0,doublei=0){

_____2_____;ipart=i;}

complexoperator-();

friendcomplexoperator+(constcomplex&,constcomplex&);

friendcomplexoperator-(constcomplex&,constcomplex&);

friendcomplexoperator*(constcomplex&,constcomplex&);

friendcomplexoperator/(constcomplex&,constcomplex&);

friend___3___operator>(constcomplex&,constcomplex&);

friendintoperator>=(constcomplex&,constcomplex&);

friendintoperator<(constcomplex&,constcomplex&);

friendintoperator<=(constcomplex&,constcomplex&);

friendintoperator==(constcomplex&,constcomplex&);

friendintoperator!

=(constcomplex&,constcomplex&);

friendistream&operator>>(istream&si,complex&c){

si>>c.rpart>>c.ipart;

returnsi;}

friendostream&operator<<(ostream&so,constcomplex&c){

so<<'('<

_____4_____;}};

doublecomplex:

:

abs()const{

returnsqrt(rpart*rpart+_____5_____);}

doublecomplex:

:

norm()const{

return(rpart*rpart+ipart*ipart);}

complexcomplex:

:

operator-(){

returncomplex(-rpart,-ipart);}

complexoperator+(constcomplex&c1,constcomplex&c2){

returncomplex(c1.rpart+c2.rpart),c1.ipart+c2.ipart);}

complexoperator-(constcomplex&c1,constcomplex&c2){

returncomplex(_____6_____,c1.ipart-c2.ipart);}

complexoperator*(constcomplex&c1,constcomplex&c2){

returncomplex(c1.rpart*c2.rpart-c1.ipart*c2.ipart,

c1.rpart*c2.ipart+c1.ipart*c2.rpart);}

complexoperator/(constcomplex&c1,constcomplex&c2){

complexres;

doubled=c2.norm();

if(d!

=0){

res.rpart=(c1.rpart*c2.rpart+c1.ipart*c2.ipart)/d;

res.ipart=(c1.ipart*c2.rpart-c1.rpart*c2.ipart)/d;}

else{cerr<<"diveby0.\n";exit

(1);}

___7___;}

intoperator>(constcomplex&c1,constcomplex&c2){

returnc1.abs()>c2.abs();}

intoperator>=(constcomplex&c1,constcomplex&c2){

return_____8_____;}

intoperator<(constcomplex&c1,constcomplex&c2){

returnc1.abs()

intoperator<=(constcomplex&c1,constcomplex&c2){

returnc1.abs()<=c2.abs();}

intoperator==(constcomplex&c1,constcomplex&c2){

returnc1.rpart==c2.rpart&&c1.ipart==c2.ipart;}

intoperator!

=(constcomplex&c1,constcomplex&c2){

return_____9______||c1.ipart!

=c2.ipart;}

voidmain(){

___10___c1(1,2),c2(3,4),c3;

cin>>c3;cout<

c3=-c1*2+c2/c3*c1-6;

cout<

if(c1>c2)cout<

elsecout<

cin>>c1>>c2>>c3;

cout<

3.有一家医院的门诊记录如下所示,已知该记录存放在一个”patient.dat”文件中,请编写一个程序,帮助医生计算一下每一位病人平均血压。

病人的编号病人血压的测量次数病人血压各次测量的结果

1001510012090110100

10022100120

1003390120130

10044807090100

10053120135110

┆┆┆

4.请完成以下集合类的设计,集合类对象的创建及使用。

#include

constintmaxcard=20;

classset{

intelems[maxcard],card;

public:

set(){card=____1____;}

friendbooloperator&(int,set);

friendbooloperator==(set,set);

friend___2___operator!

=(set,set);

friendsetoperator+(set,set);

friendsetoperator+(set,int);

friendsetoperator-(set,int);

___3___setoperator*(set,set);

friendbooloperator<(set,set);

friendbooloperator<=(set,set);

friendostream&operator<<(ostream&out,constset&s)

{out<

for(inti=0;i

out<

return____4____;}};

booloperator&(inte,sets){

for(inti=0;i

if(s.elems[i]==e)

returntrue;

return____5_____;}

booloperator==(sets1,sets2){

if(s1.card!

=s2.card)returnfalse;

for(inti=0;i

if(!

(s1.elems[i]&s2))returnfalse;

returntrue;}

booloperator!

=(sets1,sets2)

{return!

(s1==s2)?

true:

false;}

setoperator+(sets,inte)

{setres=s;

if(s.card

if(!

(e&s))res.elems[res.card++]=e;

returnres;}

setoperator+(sets1,sets2)

{setres=s1;

for(inti=0;i

res=res+s2.elems[i];

returnres;}

setoperator-(sets,inte)

{setres=s;

if(!

(e&s))returnres;

for(inti=0;i

if(s.elems[i]==e)

for(;i

_____7______;

returnres;}

setoperator*(sets1,sets2){

_____8______;

for(inti=0;i

for(intj=0;j

if(s1.elems[i]==s2.elems[j])

{res.elems[res.card++]=____9_____;break;}

returnres;}

booloperator<=(sets1,sets2){

if(s1.card>s2.card)returnfalse;

for(inti=0;i

if(!

(s1.elems[i]&s2))returnfalse;

returntrue;}

booloperator<(sets1,sets2){

returns1.card

true:

false;}

voidmain(){set______10_______;

for(inti=0;i<100;i++)s1=s1+i;

cout<

if(s1!

=s2)cout<<"\nTrue\n";elsecout<<"\nFalse\n";

s2=s1;cout<

if(s1==s2)cout<<"\nTrue\n";elsecout<<"\nFalse\n";

for(i=0;i<20;i++)s1=s1-i;

cout<

s3=s1*s2;cout<

if(s1

if(s1+s2<=s3)cout<<"\nTrue\n";elsecout<<"\nFalse\n";}

5.完成以下程序。

#include

#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1