C++试题及答案 下载本文

fun(ppstr, 20); _______ }

答案:*array=new mystring(len);,(**ppstr).show();或str.show();

[解析]调用mystring类的构造函数开辟空间,后进行字符的复制。输出可以直接使用str或者 使用二级指针。

2. 在下面程序横线处填上适当字句,完成类的定义。 class line; class box { private: int color; int upx, upy; int lowx, lowy; public: _________

void set_color (int c){color=c;}

void define_box (int x1, int y1, int x2, int y2) {upx=x1;upy=y1;lowx=x2;lowy=y2;} };

class line { private: int color;

int startx, starty; int endx, endy; public:

friend int same_color(line l,box b); void set_color (int c) {color=c;} void define_line (___________)

{startx=x1;starty=y1;endx=x2;endy=y2;} };

int same_color(line l, box b) {if (l.color==b.color) return 1; return 0; }

答案:friend int same_color(line l, box b );,int x1, int y1, int x2, int y2

[解析]成员函数作为友元函数的使用。使用friend关键字。由函数体可知形参的类型和个数。 3. 下面程序用来求直角三角形斜边长度。 #include #include class Point {private: double x,y; __________ public:

Point(double i=0,double j=0) {x=i;y=j;}

Point(Point &p) {x=p.x;y=p.y;} };

class Line {private: Point p1,p2; public:

Line(Point &xp1,Point &xp2):________{} double GetLength(); };

double Line::GetLength() {double dx=p2.x-p1.x; double dy=p2.y-p1.y;

return sqrt(dx*dx+dy*dy); }

void main()

{ Point p1,p2(6,8); Line L1(p1,p2);

cout<

答案:friend Line;,p1(xp1),p2(xp2)

[解析]友元类的使用,定义Line是Point类的友元类,成员对象的初始化采用列表的形式。 4. 在下面程序的底画线处填上适当的字句,使该程序执行结果为40。 #include class Test { public: ______;

Test (int i=0) {x=i+x;} int Getnum()

{return Test::x+7;} };

_______; void main() {Test test;

cout<

答案:static int x;,int Test::x=30;

[解析]从成员函数访问方式类名::成员可知是静态成员所以static int x;从结果要对初始 化为30,且在类外进行初始化, int Test::x=30;。

5. 在下列程序的空格处填上适当的字句,使输出为:0,2,10。 #include #include class Magic {double x; public:

Magic(double d=0.00):x(fabs(d)) {}

Magic operator+(______) {

return Magic(sqrt(x*x+c.x*c.x)); }

_______operator<<(ostream & stream,Magic & c) { stream<

void main() {Magic ma;

cout<

答案:operator+(Magic&c),friend ostream&operator

[解析]对加法进行重载,operator+(Magic & c),是对插入符进行重载,要访问成员所以定义 为友元函数,friend ostream & operator。

五、程序分析题(本大题共2小题,每小题5分,共10分) 1. 运行程序,写出程序执行的结果。 #include void main() {int a,b,c; char ch;

cin>>a>>ch>>b>>c;//从键盘上输入1.5×c×10×20,×表示一个空格 cout<

答案:1 . 5 0

[解析]使用cin进行输入字符的输入的问题。1-->a,.-->ch,5-->b,空格转换为零给了c。 2. 给出下面程序输出结果。 #include class A {public: A()

{cout<<\virtual ~A()

{cout<<\virtual void f()

{cout<<\void g() {f();} };

class B:public A {public: B()

{f();cout<<\~B()

{cout<<\};

class C:public B {public: C()

{cout<<\~C()

{cout<<\void f()

{cout<<\};

void main() {A *a=new C; a->g(); delete a; }

答案:As f(). Bs cons. Cs cons. Cs f(). Cs des. Bs des. As des.

[解析]定义C类对象时要调用基类构造函数从A到B再到C,调用B的构造函数时,B类没有

f(),则指向来自A类的f()函数。同时用基类的指针指向了派生类对象。最后析构函数的执 行。

六、程序设计题(本大题共1小题,共10分) 1. 已知交通工具类定义如下。

要求:(1)实现这个类;(2)定义并实现一个小车类car,是它的公有派生类,小车本身的私有 属性有载人数,小车的函数有init(设置车轮数,重量和载人数),getpassenger(获取载人数 ),print(打印车轮数,重量和载人数)。 class vehicle {protected:

int wheels;//车轮数 float weight;//重量 public:

void init(int wheels,float weight); int get_wheels(); float get_weight(); void print(); };

void vehicle::init(int wheels,float weight) {this->wheels=wheels; this->weight=weight; cout<

int vehicle::get_wheels() {return wheels; }

float vehicle::get_weight() {return weight;}

void vehicle::print()

{cout<<\车轮数:\重量:\答案:class car:public vehicle {private:int passengers; public:

void init(int wheels,float weight,int pass); int getpassenger();

void print();};

void car::init(int wheels,float weight,int pass) {vehicle::init(wheels,weight); passengers=pass;}

int car::getpassenger() {return passengers;} void car::print() {vehicle::print();

cout<<\可载人数:\}__

C++程序设计模拟试卷(四)

一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无 分。

1. 当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中() A. 都是虚函数

B. 只有被重新说明时才是虚函数

C. 只有被重新说明为virtual时才是虚函数 D. 都不是虚函数 答案:A

解析:在基类声明为virtual的函数为虚函数,在派生类中只要有相同的函数(函数名相 同、返回值相同、形参类型和个数相同)即使不用virtual说明,也都是虚函数。 2. 要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为() A. const char *p=“ABCD”; B. char *const p=“ABCD”; C. char const *p=“ABCD”;

D. const char * const p=“ABCD”; 答案:D

解析: const char *p说明禁止通过p修改所指向的数据。char * const p则说明不能修改

指针p的地址。因此const char * const p=“ABCD”;它禁止修改指针p本身,又禁止修改p所指 向的数据。

3. 函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为() A. 1 B. 2 C. 4 D. 5 答案:B

解析:(exp1,exp2)、(exp3,exp4,exp5)表示是两个逗号表达式,值是最后一个值,相当于两个 参数。因此实参的个数是2。 4. 设有函数模板 template Q Sum(Q x,Q y) {return (x)+(y);}

则下列语句中对该函数模板错误的使用是() A. Sum(10,2); B. Sum(5.0,6.7); C. Sum(15.2f,16.0f); D. Sum(“AB”,”CD”); 答案:D

解析:由Q Sum(Q x,Q y)可知形参和函数返回值都是同一种数据类型。A、B、C三项都正确 。而D项用字符串作为实参,字符串的操作与数值类型不同,要用特殊方法进行字符串的连接和 运算。

5. 类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针 ,则p->A::func()将() A. 调用类A中的函数func() B. 调用类B中的函数func()

C. 根据p所指的对象类型而确定调用类A中或类B中的函数func() D. 既调用类A中函数,也调用类B中的函数 答案:A

解析:指向类成员指针的使用,A::func()是明确调用A类的func函数,所以不管p指向基

类或者派生类对象,都执行基类虚函数。注意p->A::func()和p->fun();进行区分。如果使用p- >fun(),因为p指向派生类对象,由动态多态性可知要调用派生类的虚函数。 6. 在面向对象的程序设计中,首先在问题域中识别出若干个 ()