大学c习题答案习题13答案Word文档下载推荐.docx

上传人:b****6 文档编号:19571507 上传时间:2023-01-07 格式:DOCX 页数:21 大小:19.99KB
下载 相关 举报
大学c习题答案习题13答案Word文档下载推荐.docx_第1页
第1页 / 共21页
大学c习题答案习题13答案Word文档下载推荐.docx_第2页
第2页 / 共21页
大学c习题答案习题13答案Word文档下载推荐.docx_第3页
第3页 / 共21页
大学c习题答案习题13答案Word文档下载推荐.docx_第4页
第4页 / 共21页
大学c习题答案习题13答案Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

大学c习题答案习题13答案Word文档下载推荐.docx

《大学c习题答案习题13答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大学c习题答案习题13答案Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

大学c习题答案习题13答案Word文档下载推荐.docx

D:

:

show()called.8

若将A行的virtual去掉,则结果为:

B:

show()called.5

对本题,若将虚线框中的fun()和main()函数同时修改成右侧实线框中的对应函数,则若A行有virtural时,结果为:

show()called.8;

若A行无virtual时,结果为:

show()called.5。

3.

运行结果为:

TheBversionB

TheD1info:

4version1

TheD2info:

100versionB

TheD3info:

-25version3

去掉A行的virtual,则运行结果为:

TheBversion1

TheBversion3

4.

(1)operatorchar*()

(2)returns;

(3)str=num;

四、编程题

//实现1,赋值运算符重(=和+=)载函数的返回值为对象的引用。

//缺点:

不可实现对象的连续赋值,只能c1=c2

#include<

iostream.h>

classComplex

{

floatReal,Image;

public:

Complex(floatr=0,floati=0)

{

Real=r;

Image=i;

}

voidshow()

cout<

<

"

("

Real<

'

'

Image<

)\n"

;

voidoperator=(Complex&

);

//用成员实现,注意:

=不能用友元实现

voidoperator+=(Complex&

//用成员实现,+=可以用友元实现

friendComplexoperator+(Complex&

Complex&

//用友元实现

friendComplexoperator-(Complex&

};

voidComplex:

operator=(Complex&

c)//返回值void

Real=c.Real;

Image=c.Image;

}

operator+=(Complex&

Real=Real+c.Real;

Image=Image+c.Image;

Complexoperator+(Complex&

c1,Complex&

c2)

Complext;

t.Real=c2.Real+c1.Real;

t.Image=c2.Image+c1.Image;

returnt;

Complexoperator-(Complex&

t.Real=c1.Real-c2.Real;

t.Image=c1.Image-c2.Image;

voidmain()

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

c3=c1;

c3.show();

c3=c1+c2;

c3.show();

c3+=c2;

c3=c1-c2;

//实现2,赋值运算符重(=和+=)载函数的返回值为对象的引用。

//优点:

可实现对象的连续赋值,如c1=c2=c3

Complex&

Complex&

Complex:

c)//返回值为对象的引用

return*this;

c3=c2=c1;

2.

#include<

math.h>

classFraction

{

intm,n;

//m是分子,n是分母

Fraction(intim=0,intin=1)

{

intt=gcd(im,in);

m=im/t;

n=in/t;

if(m*n>

0)//若分子和分母同号

{m=abs(m);

n=abs(n);

else//若分子和分母异号

{m=-abs(m);

};

intgcd(intx,inty);

Fraction&

operator=(Fractionb)

m=b.m;

n=b.n;

return*this;

Fractionoperator+(Fractionb)

{returnFraction(m*b.n+n*b.m,n*b.n);

Fractionoperator-(Fractionb)

{returnFraction(m*b.n-n*b.m,n*b.n);

friendFractionoperator*(Fractiona,Fractionb);

friendFractionoperator/(Fractiona,Fractionb);

voidShow()

{cout<

m<

/'

n<

endl;

intFraction:

gcd(intx,inty)//返回的最大公约数是正数

intr;

if(x<

0)x=-x;

if(y<

0)y=-y;

while(r=x%y)

{x=y;

y=r;

returny;

Fractionoperator*(Fractiona,Fractionb)

{returnFraction(a.m*b.m,a.n*b.n);

Fractionoperator/(Fractiona,Fractionb)

{returnFraction(a.m*b.n,a.n*b.m);

Fractiona(1,3),b(3,-12),c;

cout<

a="

a.Show();

b="

b.Show();

c=a+b;

a+b="

c.Show();

c=a-b;

a-b="

c=a*b;

a*b="

c=a/b;

a/b="

classPoint

floatx,y;

Point(floata=0,floatb=0)

{x=a;

y=b;

x="

x<

\t'

y="

y<

\n'

Point&

operator++();

//用成员函数实现前置,返回引用

Pointoperator++(int);

//用成员函数实现后置,返回对象

friendPoint&

operator--(Point&

//用友元函数实现前置,返回引用

friendPointoperator--(Point&

int);

//用友元函数实现后置,返回对象

//前置或后置,一般应返回对象或引用,否则只能单独使用

//既a++合法,而b=a++;

非法

Point&

Point:

operator++()//前置,成员实现

x++;

y++;

PointPoint:

operator++(int)//后置,成员实现

Pointt=*this;

p)//前置,友元实现

p.x--;

p.y--;

returnp;

Pointoperator--(Point&

p,int)//后置,友元实现

Pointtemp=p;

p.y--;

returntemp;

Pointm(1,2),c;

c=m++;

//如果只写m++;

m.show();

则无法测出是前置还是后置

c.show();

c=++m;

c=m--;

c=--m;

4.

string.h>

classstring

char*str;

intlen;

string(char*s=0)//构造函数,含缺省构造函数

if(s)//此处必须判断s是否为空指针。

{

len=strlen(s);

//若s为空指针,则strlen(s)报运行错。

str=newchar[len+1];

strcpy(str,s);

}

else

len=0,str=0;

//注意逗号

string(string&

st)//拷贝构造函数,必须要定义,想一想为什么?

if(st.str)

len=st.len;

str=newchar[len+1];

strcpy(str,st.str);

~string()//析构函数

if(str)

delete[]str;

voidset(char*s)//置值

//必须先删除原空间

if(s)

str=newchar[strlen(s)+1];

str=0,len=0;

voidshow(void)//显示串

cout<

str<

else

Thestringisempty!

intgetlen(void)//获取长度

returnlen;

//解1

voiddelchar(charch)//删除字符(删除所有参数指定的字符)

inti,j;

for(i=j=0;

str[i];

i++)

if(str[i]!

=ch)str[j++]=str[i];

str[j]='

\0'

char*t=str;

//使字符串长度与成员len的值保持一致

str=newchar[strlen(t)+1];

strcpy(str,t);

len=strlen(str);

delete[]t;

/*解2

inti=0;

//while(i<

len)

while(str[i])//删除若干字符后,len与str指向的空间长度不一致

if(str[i]==ch)//可处理成一致,亦可忽略这种不一致

{

strcpy(str+i,str+i+1);

len--;

//注意

}

elsei++;

*/

/*解3

voiddelchar(charch)

inti=0,j=0;

for(;

i<

len;

i++)

{

if(str[i]==ch)

j=i;

for(;

j<

j++)//循环将后面的字符向前挪动一位

str[j]=str[j+1];

i--;

}

string&

operator=(string&

s)//赋值运算只能用成员实现

len=s.len;

if(s.str)

strcpy(str,s.str);

str=0;

string&

operator+=(string&

s)//字符串拼接+=

stringt=*this;

//调用拷贝构造函数,初始化t(保存老串)

delete[]str;

//删除老串

len=len+s.len;

if(len)

str=newchar[len+1];

strcpy(str,t.str);

strcat(str,s.str);

friendstringoperator+(string&

s1,string&

s2);

//字符串拼接+,类外实现

intoperator==(string&

s)//字符串比较

if(strcmp(str,s.str)==0)

return1;

return0;

//或return(!

strcmp(str,s.str));

stringoperator+(string&

s2)//字符串拼接+,类外实现

stringt;

t.len=s1.len+s2.len;

if(t.len)

t.str=newchar[t.len+1];

strcpy(t.str,s1.str);

strcat(t.str,s2.str);

t.str=0;

returnt;

//因为返回对象(动态申请空间),所以要定义拷贝构造函数

char*a="

Cplusplus"

strings1(a),s2("

language"

),s3;

//测试两种构造函数

s1.show();

s2.show();

s3.show();

cout<

"

Beforassign:

\n"

if(s1==s2)//测试比较运算符==

s1ands2issame!

endl<

if(!

(s1==s2))

s1ands2isdifferent!

s1=s2;

//测试赋值运算符=

Afterassigns1=s2:

if(s1==s2)

s3=s1+s2;

//测试加法及赋值运算符+=,=

s3+=s2;

//测试运算符+=

s3.delchar('

e'

//想一想,能否处理成s3-'

//测试删除字符串函数

a'

g'

5.

classMatrix

int*p,m,n;

Matrix(intmm,intnn)

m=mm,n=nn;

p=newint[m*n];

Matrix(Matrix&

b)

for(inti=0;

i<

m*n;

p[i]=(b.p)[i];

voidinput()

inti;

for(i=0;

cin>

>

p[i];

Matrixoperator+(Matrix&

b)//?

?

if(m!

=b.m||n!

=b.n)

Thetwomatrixarenotsamesize!

return*this;

p[i]+=(b.p)[i];

voidoperator=(Matrix&

b)

inti,j;

int*p1=p;

m;

for(j=0;

j<

n;

j++)

cout<

(*p1++)<

end

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

当前位置:首页 > 人文社科 > 设计艺术

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

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