c 练习题(附答案)_第1页
c 练习题(附答案)_第2页
c 练习题(附答案)_第3页
c 练习题(附答案)_第4页
c 练习题(附答案)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.9

(11)下列关于C++函数的叙述中,正确的是

A)每个函数至少要具有一个参数B)每个函数都必须返回一个值

C)函数在被调用之前必须先声明D)函数不能自己调用自己

(12)下列关于类和对象的叙述中,错误的是

A)一个类只能有一个对象

B)对象是类的具体实例

C)类是对某一类对象的抽象

D)类和对象的关系是一种数据类型与变量的关系

(13)在C++中,用于实现运行时多态性的是

A)内联函数B)重载函数

C)模板函数D)虚函数

(14)下列关于运算符重载的叙述中,正确的是

A)通过运算符重载,可以定义新的运算符

B)有的运算符只能作为成员函数重载

C)若重载运算符+,则相应的运算符函数名是+

D)重载一个二元运算符时,必须声明两个形参

(15)下列关于模板的叙述中,错误的是

A)模板声明中的第一个符号总是关键字template

B)在模板声明中用<和>括起来的部分是模板的形参表

C)类模板不能有数据成员

D)在一定条件下函数模板的实参可以省略

(16)对于语句cout«endl«x;中的各个组成部分,下列叙述中错误的是

A)"cout”是一个输出流对象

B)"endl”的作用是输出回车换行

C)"X"是一个变量

D)"<<"称作提取运算符

(17)下列字符串中,正确的C++标识符是

A)foo-1B)2b

C)newD)_256

(18)已知枚举类型定义语句为:

enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};

则下列叙述中错误的是

A)枚举常量NAME的值为1B)枚举常量NUMBER的值为1

C)枚举常量MINUS的值为6D)枚举常量PRINT的值为10

(19)执行语句序列

inti=0;while(i<25)i+=3;cout«i;

输出结果是

A)24B)25

C)27D)28

(20)要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,

0和0,则下列定义语句

中错误的是

A)intvectlJ={30,50,-88};B)intvect[]={30,50,-88,0,0};

C)intvect[5]={30,50,-88};D)intvect[5]={30,50,-88,0,0);

(21)有如下程序:

#include<iostream>

voidfun(int&x,inty){intt=x;x=y;y=t;}

intmain()

(

inta[2]={23,42);

fun(a[l],a[0]);

std::cout«a[0]«n,n«a[1]«std::endl;

return0;

)

执行后的输出结果是

A)42,42B)23,23

C)23,42D)42,23

(22)有如下类声明:

classFoo{intbar;};

则Foo类的成员bar是

A)公有数据成员B)公有成员函数

C)私有数据成员D)私有成员函数

(23)有如下类声明:

classMyBASE

(

intk;

public:

voidset(intn){k=n;}

intget()const{returnk;}

);

classMyDERIVED:protectedMyBASE

(

protected:

intj;

public:

voidset(intm,intn){MyBASE::set(m);j=n;}

intget()const{returnMyBASE::get()+j;}

);

则类MyDERIVED中保护的数据成员和成员函数的个数是

A)4B)3

C)2D)1

(24)已知在一^个类体中包含如下函数原型:VOLUMEoperator-(VOLUME)const;,下列关

于这个函数的叙述中,错误

的是

A)这是运算符-的重载运算符函数

B)这个函数所重载的运算符是一个一元运算符

C)这是一个成员函数

D)这个函数不改变类的任何数据成员的值

(25)有如下函数模板定义:

template<classT>

Tfunc(Tx,Ty){returnx*x+y*y;}

在下列对func的调用中,错误的是

A)func(3,5);B)func(3.0,5.5);

C)func(3,5.5);D)func<int>(3,5.5);

(27)在下列函数原型中,可以作为类AA构造函数的是

A)voidAA(int);

B)intAA();

C)AA(int)const;

D)AA(int);

(28)下列关于this指针的叙述中,正确的是

A)任何与类相关的函数都有this指针

B)类的成员函数都有this指针

C)类的友元函数都有this指针

D)类的非静态成员函数才有this指针

(29)有如下程序:

#include<iostream>

usingnamespacestd;

classTest

(

public:

Test(){n+=2;}

~Test(){n-=3;}

staticintgetNum(){returnn;}

private:

staticintn;

);

intlest::n=l;

intmain()

(

Test*p=newTest;

deletep;

cout«,,n=',«Test::getNum()«endl;

return0;

)

执行后的输出结果是

A)n=0B)n=l

C)n=2D)n=3

(30)有如下程序:

#include<iostream>

usingnamespacestd;

classA{

public:

A(){cout«,'An;}

);

classB{public:B(){cout«nBn;}}

classC:publicA{

Bb;

public:

C(){cout«,,CH;}

);

intmain(){Cobj;return0;}

执行后的输出结果是

A)CBAB)BAC

C)ACBD)ABC

(31)有如下类声明:

classXA{

intx;

public:

XA(intn){x=n;}

);

classXB:publicXA{

inty;

public:

XB(inta,intb);

);

在构造函数XB的下列定义中,正确的是

A)XB::XB(inta,intb):x(a),y(b){}B)XB::XB(inta,intb):XA(a),y(b){)

C)XB::XB(inta,intb):x(a),XB(b){}D)XB::XB(inta,intb):XA(a),XB(b){}

(32)有如下程序:

#include<iostream>

usingnamespacestd;

classBASE{

public:

-BASEO{cout«nBASEU;}

);

classDERIVED:publicBASE{

public:

-DERIVED(){cout«,'DERIVEDH;}

);

intmain(){DERIVEDx;return0;}

执行后的输出结果是

A)BASEB)DERIVED

C)BASEDERIVEDD)DERIVEDBASE

(33)在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的

运算符。下列叙述中正确的

A)operator+有两个参数,operator*有两个参数

B)operator+有两个参数,operator*有一个参数

C)operalor+有一个参数,operator*有两个参数

D)operator+有一个参数,operator*有一个参数

(34)下面关于C++流的叙述中,正确的是

A)cin是一个输入流对象

B)可以用ifslream定义一个输出流对象

C)执行语句序列char*y="PQMNn;cout«y;将输出字符串“PQMN”的地址

D)执行语句序列charx[80];cin.getline(x,80);时,若键入

Happynewyear

则x中的字符串是“Happy”

(35)有如下程序:

#include<iostream>

usingnamespacestd;

classAA{

intn;

public:

AA(intk):n(k){}

intget(){returnn;}

intget()const{returnn+1;}

);

intmain()

{

AAa(5);

constAAb(6);

cout«a.get()«b.get();

return0;

)

执行后的输出结果是

A)55B)57

C)75D)77

(6)下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回

false。请在横线处填上适当内容,实现该函数。

boolfun(char*str)

(

inti=0,j=0;

while(str[j]);

for(j-;i<j&&str[i]==str[j];i++,j-);

returnij;

(7)执行语句序列

intx=10,&r=x;

cout<<x«'-,«r«endl;

输出结果为O

(8)下列程序的输出结果为

Objectid=0

Objectid=l

请将程序补充完整。

#include<iostream>

usingnamespacestd;

classPoint

(

public:

Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}

〜Point(){countP--;}

intGetX(){returnX;}

intGetY(){returnY;}

staticvoidGetC(){cout«"Objectid=H«countP«endl;}

private:

intX,Y;

staticintcountP;

);

〃静态数据成员的初始化

intmain()

(

Point::GetC();

PointA(4,5);

A.GetC();

return0;

)

)

(9)非成员函数应声明为类的函数才能访问这个类的private成员。

(10)派生类中的成员不能直接访问基类中的成员。

(11)下列程序的输出结果为2,请将程序补充完整。

#include<iostream>

usingnamespacestd;

classBase

(

public:

voidfun(){cout«l;}

);

classDerived:publicBase

{

public:

voidfun(){cout«2;}

);

intmain()

Base*p=newDerived;

p->fun();

deletep;

return0;

)

(12)请将下列类定义补充完整。

classBase{public:voidfun(){cout«"Base::fun"«endl;));

classDerived:publicBase

(

public:

voidfun(){

〃显式调用基类的fun函数

cout«,'Derived::fun',«endl;

)

);

一、选择题

(11)C)(12)A)(13)D)(14)B)(15)C)

(16)D)(17)D)(18)A)(19)C)(20)A)

(21)B)(22)C)(23)B)(24)B)(25)C)

(27)D)(28)D)(29)A)(30)D)

(31)B)(32)D)(33)C)(34)A)(35)B)

二、填空题

(6)j++>=

(8)intPoint::counlP=0;

(9)友元

(10)私有或private

(11)virtual

(12)Base::fun();

6.4

(11)下列关于C++函数的说明中,正确的是

A)内联函数就是定义在另一个函数体内部的函数

B)函数体的最后一条语句必须是return语句

C)标准C++要求在调用一个函数之前,必须先声明其原型

D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式

(13)下列关于虚函数的说明中,正确的是

A)从虚基类继承的函数都是虚函数

B)虚函数不得是静态成员函数

C)只能通过指针或引用调用虚函数

D)抽象类中的成员函数都是虚函数

(14)运算符重载是对已有的运算符赋予多重含义,因此

A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义

B)可以改变一个已有运算符的优先级和操作数个数

C)只能重载C++中已经有的运算符,不能定义新运算符

D)C++中已经有的所有运算符都可以重载

(15)模板对类型的参数化提供了很好的支持,因此

A)类模板的主要作用是生成抽象类

B)类模板实例化时,编译器将根据给出的模板实参生成一个类

C)在类模板中的数据成员都具有同样类型

D)类模板中的成员函数都没有返回值

(18)下列语句中,错误的是

A)constintbuffer=256;B)constinttemp;

C)constdouble*point;D)constdouble*rt=newdouble(5.5);

(20)有如下程序:

#include<iostream>

usingnamespacestd;

intmain()

(

int*p;

*p=9;

cout«"Thevalueatp:H«*p;

return0;

)

编译运行程序将出现的情况是

A)编译时出现语法错误,不能生成可执行文件

B)运行时一定输出:Thevalueatp:9

C)运行时一定输出:Thevalueatp:*9

D)运行时有可能出错

(21)有如下程序:

#include<iostream>

usingnamespacestd;

intmain()

(

voidfunction(doubleval);

doubleval;

function(val);

cout«val;

return0;

)

voidfunction(doubleval)

(

val=3;

)

编译运行这个程序将出现的情况是

A)编译出错,无法运行B)输出:3

C)输出:3.0D)输出一个不确定的数

(22)有如下类定义:

classAA

inta;

public:

intgetRef()const{return&a;}〃①

intgetValue()const{returna;}〃②

voidset(intn)const{a=n;}//(§)

friendvoidshow(AAaa)const{cout«a;)〃④

);

其中的四个函数定义中正确的是

A)①B)②

C)③D)④

(23)有如下程序:

#include<iostream>

usingnamespacestd;

classBase

(

public:

voidfun(){cout«nBase::funn«endl;}

);

classDerived:publicBase

(

public:

voidfun()

cout«nDerived::funM«endl;

)

);

intmain()

(

Derivedd;

d.fun();

return0;

)

已知其执行后的输出结果为:

Base::fun

Derived::fun

则程序中下划线处应填入的语句是

A)Base.fun();B)Base::fun();

C)Base->fun();D)fun();

(24)下面是重载为非成员函数的运算符函数原型,其中错误的是

A)Fractionoperator+(Fraction,Fraction);B)Fractionoperator-(Fraction);

C)Fraction&operator=(Fraction&,Fraction);D)Fraction&operator+=(Fraction&,Fraction);

(25)有如下函数模板:

template<typenameT,typenameU>

Tcast(Uu){returnu;}

其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast

的调用中正确的是

A)cast(i):B)casto(i);

C)cast<char*,int>(i);D)casKdouble,int>(i);

(26)若磁盘上已存在某个文本文件,其全路径文件名为d:\ncre\test.txt,下列语句中不能

打开该文件的是

A)ifstreamfile("d:\ncre\test.txt");B)ifstreamfile("d:\\ncre\\test.txt");

C)ifstreamfile;file.open("d:\\ncre\\test.txt");D)ifstream*pFile=new

ifstream("d:\\ncre\\test.txt");

(27)有如下类定义:

classFoo

(

public:

Foo(intv):value(v){}〃①

~Foo(){}〃②

private:

Foo(){}〃③

intvalue=0;〃④

);

其中存在语法错误的行是

A)①B)②

C)③D)④

(28)有如下类定义:

classPoint

(

intx_,y_;

public:

Point():xJO),y_(0){}

Point(intx,inty=0):x_(x),y_(y){}

);

若执行语句

Pointa(2),b[3],*c[4];

则Point类的构造函数被调用的次数是

A)2次B)3次

C)4次D)5次

(29)有如下类定义:

classTest

public:

Test(){a=0;c=0;}//①

intf(inta)const{this->a=a;)〃②

staticintg(){returna;}〃③

voidh(intb){Test::b=b;};//④

private:

inta;

staticintb;

constintc;

);

intTest::b=0;

在标注号码的行中,能被正确编译的是

A)①B)②

C)③D)④

(30)有如下程序:

#include<iostream>

usingnamespacestd;

classA

(

public:

A(){cout«"A";}

〜A(){cout«"〜A";}

);

classB:publicA

(

A*p;

public:

B(){cout«"Bn;p=newA();}

〜B(){cout«"〜B";deletep;}

);

intmain()

(

Bobj;

return0;

)

执行这个程序的输出结果是

A)BAA~A~B~AB)ABABA〜A

C)BAA~B~A~AD)ABA~A~B~A

(32)有如下程序:

#include<iostream>

usingnamespacestd;

classBase

public:

voidfun1(){cout«HBase\nn;}

virtualvoidfun2(){cout«"Base\n";)

);

classDerived:publicBase

(

public:

voidfun1(){cout«"Derived\nn;}

voidfun2(){cout«nDerived\nn;}

);

voidf(Base&b){b.funl();b.fun2();}

intmain()

(

Derivedobj;

f(obj);

return0;

)

执行这个程序的输出结果是

A)B)

BaseBase

BaseDerived

C)D)

DerivedDerived

BaseDerived

(33)有如下程序:

#include<iostream>

usingnamespacestd;

classComplex

!

doublere,im;

public:

Complex(doubler,doublei):re(r),im(i){}

doublereal()const{returnre;}

doubleimage()const{returnim;)

Complex&operator+=(Complexa)

(

re+=a.re;

im+=a.im;

return*this;

)

);

ostream&operator«(ostream&s,constComplex&z)

returns«'('«z.real()«,,,«z.image()«')';

intmain()

(

Complexx(l,-2),y(2,3);

cout«(x+=y)«endl;

return0;

)

执行这个程序的输出结果是

A)(1,-2)B)(2,3)

C)(3,5)D)(3,1)

(35)有如下类声明:

classSAMPLE

(

intn;

public:

SAMPLE(inti=0):n(i){}

voidsetValue(intnO);

);

下列关于getValue成员函数的实现中,正确的是

A)SAMPLE::setValue(intn0){n=n0;}

B)voidSAMPLE::setValue(intn0){n=n0;}

C)voidsetValue(intn0){n=n0;}

D)(intn0){n=n0;}

(6)有一种只在循环语句或switch语句中使用的流程控制语句,表示该语句的关键字是

(7)程序中有如下语句

for(inti=0;i<5;i++)cout«*(p+i)«",H;

能够依次输出int型一维数组DATA的前5个元素。由此可知,变量p的定义及初始化

语句是o

(8)若下面程序运行时输出结果为

l,A,10.1

2,B,3.5

请将程序补充完整。

#include<iostream>

usingnamespacestd;

intmain()

(

voidtest(int,char,double);

test(l,'A;10.1);

test(2,'B*);

return0;

voidtest(inta,charb,doublec)

cout«a«','«b«,,'<<c«end1;

}

(9)有如下类声明:

classMyClass

(

inti;

private:intj;

protected:intk;

public:intm,n;

);

其中,私有成员的数量为。

(10)有如下程序:

#include<iostream>

usingnamespacestd;

classCon

(

charID;

public:

Con():ID(*A'){cout«1;}

Con(charlD):ID(ID){cout«2;}

Con(Con&c):ID(c.getID()){cout«3;}

chargetID()const{returnID;}

);

voidshow(Conc){cout«c.getID();}

intmain()

(

Conc1;

show(cl);

Conc2('B');

show(c2);

return0;

)

执行上面程序的输出是。

(11)有如下程序:

#include<iostream>

usingnamespacestd;

classONE

{

public:

virtualvoidf(){coutvvT;}

);

classTWO:publicONE

public:

TWO(){cout«“2";}

);

classTHREE:publicTWO

(

public:

virtualvoidf(){TWO::f();cout«”3";}

);

intmain()

(

ONEaa,*p;

TWObb;

THREEcc;

p=&cc;

p->f();

return0;

)

执行上面程序的输出是O

(12)有如下程序:

#include<iostream>

usingnamespacestd;

classPARENT

(

public:

PARENT(){cout«“PARENT";}

);

classSON:publicPARENT

(

public:

SON(){cout«"SON";}

);

intmain()

(

SONson;

PARENT*p;

p=&son;

return0;

)

执行上面程序的输出是.

(14)下面是复数类complex的定义,其中重载的运算符“+”的功能是返回一个新的复数

对象,其实部等于两个操作

对象实部之和,其虚部等于两个操作对象虚部之和;请补充完整:

classcomplex

doublereal;〃实部

doubleimag;〃虚部

public:

complex(doubler,doublei):real(r),imag(i){}

complexoperator+(complexa)

(

returncomplex();

)

};

(15)已知一个函数模板定义为

template<typenameTl,typenameT2>

T1FUN(T2n){returnn*5.0;}

若要求以int型数据7为函数实参调用该模板函数,并返回一个double型数据,则该调

用应表示为o

一、选择题

(11)C)(13)B)(14)C)(15)B)

(18)B)(20)D)

(21)D)(22)B)(23)B)(24)C)(25)D)

(26)A)(27)D)(28)C)(29)D)(30)B)

(32)B)(33)D)(35)B)

二、填空题

(6)break

(7)int*p=DATA

(8)=3.5

(9)2

(10)13A23B

(11)2213

(12)PARENTSON

(14)[14]real+a.real,imag+a.imag

(15)[15]FUN<double>(7)或FUN<double,int>(7)

三、完善程序

1.用指针和数组来显示Fibonacci数列。

#include<iostream>

usingnamespacestd;

intmainO

inti,fibon[10]={0,1,1,2,3,5,8,12,21,34},*pfibl,*pfib2;

pfibl=pfib2=;

cout<<〃使用数组显示Fibonacci数列〃<<endl;

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

cout<<fibon[i]\t?<<«endl;

cout<<〃使用指针显示Fibonacci数列〃<<endl;

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

cout«*(fibon+i)\t?«<<endl;

cout«〃显示指针相减,应为数组长度:〃;

cout<<pfib2-pfibl<<endl;

return0;

2.定义一个矩形类Rectangle,数据成员有:长a,宽b,均为整型,

私有访问权限。对其操作有:输入操作、计算周长perimeter、计算

面积和输出操作。

classRectangle

inta,b;

public:

voidinput();

voidperimeter();

voidarea();

voidoutput();

}sl;

input()〃成员函数中访问类中的数据成员

{

cout«〃请输入矩形的长和宽:〃;

cin>>a»b;

)

voidRectangle::perimeter()〃注意类名不可省

(

cout<<〃其周长为:,z<<(a+b)*2<<endl;

)

voidRectangle::area()

cout<〈〃其面积为:〃<<a*b«endl;

voidRectangle::output()

perimeter();〃在成员函数中可以调用其他成员函数

voidmain()

(

si.input();

si.output();

)

3.用有参构造函数来完成学生类的编写。

#include<iostream>

usingnamespacestd;

classstudent

(

private:

charm_num[5];

floatmscore;

public:

student(charnum[5],floatscore);

voidoutput();

);

student::student(charnum[5],floatscore)

m_score=score;

)

voidstudent::output0

(

cout<<m_num<<,'<<m_name<<,’<<m_score«endl;

)

voidmain()

〃创建类对象,学号330105002,分数80

si.output();

4.完成商品类对象的应用实例。

#include<iomanip>

#include<string>

usingnamespacestd;

classCGoods

{

private:

charName[21];

intAmount;

floatPrice;

floatTotal_value;

public:

CGoods();〃无参构造函数

CGoods(char[],int,float);/*有参构造函数,参数个数为3*/

voidCountTotal(void);/*函数声明时,形参中可以只有返回类型*/

floatGetTotal_value(void);

);

CGoods::CGoods()

{

Name[0]=,\0,;Price=0.0;

Amount=0;Total_value=0.0;

)

CGoods::CGoods(charname[],intamount,floatprice)

Price=price;

Amount=amount;

Total_value=price:icamount;

)

voidCGoods::CountTotal()

(

Total_value=____________________

)

floatCGoods::GetTotal_value()

)

intmain()

CGoodsCarl(〃夏利〃,30,98000.0);

cout«setw(10)«Carl.GetPrice()<<setw(20)<<Carl.GetTotal_value()<

<endl;

return0;

)

5.打印杨辉三角形,要求使用类及多文件结构实现。

/*头文件:yang,h*/

classyang

{

inta[20][20];

intn;

public:

yang(int1=10);

voidshow();

};

/*源文件:yang.cpp*/

#include<iostream>

ttinclude<iomanip>

usingnamespacestd;

yang::yang(int1)

(

inti,j;

n=K=10?l:10;

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

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

(

if()

a[i]

else

voidyang::show()

{

inti,j,k;

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

for(k=30-3*i;k>=0;k—)

COUt<<Z/

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

cout<<setw(6)«a[i][j];

cout<<endl;

)

)

/*源文件:test,cpp*/

#include<iostream>

#include"yang.h"

usingnamespacestd;

voidmain()

(

inti;

yangs[4];

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

(

s[i]=(i+3);

s[i].show();

)

)

6.(1)使用指针作为函数参数交换两个变量的值。

#include<iostream>

usingnamespacestd;

voidchange(int*pl,int*p2)/*以指针作为形参*/

(

intt;

t=*pl;

*p2=t;

)

voidmain()

intx=100,y=40;

cout<<〃交换前的值为〃<Xendl;

cout<<x<<55<<y<<endl;

cout«”交换后的值为“《endl;

cout«x<<,)«y<<endl;

)

(2)使用引用作为形参交换两个变量的值。

#include<iostream>

usingnamespacestd;

voidchange(int&s,int&d)

(

intt;

t=s;

s=d;

d=t;

)

voidmain()

(

intx=100,y=40;

cout<X〃交换前的值为〃<Xendl;

cout<<x<<?5<<y<<endl;

cout<<〃交换后的值为〃。endl;

cout<<x<<?J<<y<<endl;

)

7.从键盘上输入字符,写入文件fl.txt中,'O'表示输入结束。

voidmain()

(

ofstreamofile;

charch;

inti=0;

ofile.open(,ze:\\fl.txt〃);

do{

ch=cin.get();

ofile<<setw(3)«ch;

i++;

if(i==10)

ofile«endl;

i=0;

}while(ch!='O');

ofile.close();

)

打开文件fl.txt,读出其内容,在屏幕上输出。

voidmain()

(

ifstreamifile;

charch;

ifile.open(/ze:\\fl.txt〃);

while(ifile.get(ch))

{

cout<<ch;

)

cout<<endl;

ifile.close();

)

8.构造CPU类与Computer类,具体成员如右图所示:

classCPU

(

charcputype[20];

floatcpuprice;

public:

CPU(chara_cputype[]="惠普",floata_cpuprice=234);

CPU(constCPU&a);

voidshow();

~CPU();

);

classComputer

(

CPUk;

charManufacturer[20];

floatPrice;

public:

Computer(chark_Manufacturer[]="达利园",floatk_Price=123,char

k_cputype[]="联

”,floatk_cpuprice=7788):___________________________

strcpy(Manufacturer,kManufacturer);

Price=k_Price;

)

voidprint()

{

cout<〈”制造商是:“〈<Manufacturer«endl;

cout<<“电脑价格是:/z<<Price«endl;

-Computer。

{

cout〈<Price<〈”被析构了“<〈endl;

}

);

CPU::CPU(chara_cputype[],floatacpuprice)

(一一

strcpy(cputype,a_cputype);

cpuprice=a_cpuprice;

CPU::CPU(constCPU&a)CPUComputer

{%cputype勒CPUk

Acpuprice^>manufecturer

^>price

cpuprice=a.cpuprice+100;•CPU()

•CPU()•Computer。

}•printf)

voidCPU::show()•show。•\Computer。

cout〈〈”CPU的类型:z,«cputype«endl;

cout«”CPU的价格:"<<cpuprice<〈endl;

CPU::"CPU0

{

cout«cputype<〈”被析构了"<<endl;

}

voidmainO

Computers;

s.print();

9.定义复数类,通过重载+运算符进行复数类对象间的算术运算。

classcomplex

doublereal,image;

public:

complex(doubler=0,doublei=0);

complexoperator+(constcomplex&a);

voidshow();

);

complex::complex(doubler,doublei)

real=r;

complexcomplex::operator+(constcomplex&a)

{

complextemp;

temp.real=;

temp.image=image+a.image;

return;

)

voidcomplex::show()

(

cout«real«//+/z<<image«//i/z<<endl;

}

voidmain()

{

complexsi(1,1);

si.show();

complexs2(2,2);

s2.show();

complexs3=sl+s2;

s3.show();

)

10.掌握友元函数的用法,友元函数与成员函数的区别。

重载插入运算符“〈心,实现功能类似于成员函数print。

classcomplex

(

doublereal,image;

public:

complex(doubler=l.0,doublei=l.0)

(

real=r;image=i;

)

complex&operator+(complex&a);/*形参只有一个*/

friendcomplex&operator+(double&a,complex&b);

friendcomplex&operator+(complex&a,double&b);

(ostream&s,complex&a)〃重载。运算符

(

s<<a.real<<,,+,,«a.image<<z/iz,<<endl;

returns;

)

);

complex&complex::operator+(complex&a)

(

returncomplex();

)

complex&operator+(double&a,complex&b)

(

returncomplex(a+b.real,a+b.image);

)

complex&operator+(complex&a,double&b)

(

returncomplex(a.real+b,a.image+b);

voidmainO

doubles=4.0;

complexc(2.0,2.0),cl,x;

x=c+cl;

cout«x;/*使用友元可以直接写cout”、、、,不需再调用*/

x=s+c;

cout«x;

x=cl+s;

cout<<x;

)

11.模板

定义求字符串及类对象的最值的函数。

usingnamespacestd;

template<typenameT>

Tgetmax(Ta[],intsize)

(

inti;

Tm=a[0];

for(i=l;i<size;i++)

if(a[i]>m)m=a[i]:

returnm;

}

classstudent

(

private:

stringnum;

floatscore;

public:

student(stringnu="21001”,floats_score=90)

{

num=nu;

score=s_score;

}

booloperator>(conststudent&s)

{

returnscore>s.score?true:false;

)

friendostream&operator<<(ostream&s,student&stu)

{

returns<<stu.num«,\t'<<stu.score<<endl;

}

friendistream&operator>>(istream&i,student&stu)

cout〈<〃请输入学生的学号和分数:,/«endl;

returni>>stu.num»stu.score;

voidmain()

(

studentstu[5];

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

cin>>stu[i];

cout<<getmax(stu,5)<<endl;

}

12.排序模板

#include<iostream>

ttinclude<iomanip>

ttinclude<string>

usingnamespacestd;

classstudent

{

private:

stringnum;

stringname;

public:

student(stringnu="001",stringna="");

voidsetdata(stringnu,stringna);

booloperator>(conststudent&s)

(

returnnum>s.num?true:false;

}

friendostream&operator«(ostream&s,student&stu);

};

student::student(stringnu,stringna)

(

num=nu;

name=na;

}

voidstudent::setdata(stringnu,stringna)

{

num=nu;

name=na;

}

ostream&operator<<(ostream&s,student&stu)

{

returns<<stu.num<<>\t'<<stu.name«endl;

)

template<typenameT>

voidBubbleSort(Ta[],intn)

inti,j;

Ttemp;

for(i=0;i<n-l;i++)〃轮数

for(j=0;j<n-i-l;j++)〃每轮两两比较的次数,即下标

if(a[j]>a[j+l])//a[j]>a[j+l]大于重载,如果改为

a[j+l"a[j]是否定确?

(

temp=a[j];

a[j]=a[j+l];

a[j+l]=temp;

)

}

template<typenameT>

voidprint(Ta[],intn)

{

for(inti=0;i〈n;i++)

cout«setw(8)<<a[i];

cout«endl;

}

voidmain()

(

/*inta[10]={2,13,4,35,6,47,24,657,20,9}:

print(a,10);

BubbleSort(a,10);

floatb[5]={2.4,3.1,1.3,23.6,12.9};

BubbleSort(b,5);

print(b,5);*/

stringnum[5]=n(H〃,〃012”,〃203〃,“404”,〃415"}:

stringname[5]={〃张三",〃李四",〃王五〃,〃赵六〃,“丁七〃};

studentstu[5];

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

stu[i].setdata(num[i],name[i]);

BubbleSort(stu,5);〃出错,原因是排序时不知道以姓名还是学号排

解决〉运算符重载

print(stu,5);

)

13.动态内存分配

完成类中声明的各函数定义,并在主函数中测试。

template<typenameT>

classAr

(

T*par;

public:

Ar(intn);〃动态申请n个T类型的数组元素空间

voidinput(intn);〃输入n个数据

voiddisplay(intn);//输出数组中n个元素

~Ar();〃撤消数组空间

);

参考代码:

#include<iostream>

usingnamespacestd;

template<typenameT>

classArray

(

T*parray;

public:

Array(intn);〃动态申请n个T类型的数组元素空间

voidinput(intn);〃输入n个数据

voiddisplay(intn);〃输出数组中n个元素

“Array。;〃撤消数组空间

template<typenameT>Array<T>::Arr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论