自考C++程序设计2019年4月试题及答案解析
-
声明一个交通工具(vehicle)基类,具有maxspeed、weight成员变量,run stop成员函数(简单输出提示“正在行进”,“停止”),同时编写vehicle类的构造函数和析构函数由此派生出自行车类(bicycle)、汽车类(motorcar),自行车类有高度(height)属性,汽车(motorcar)类有座位数(seatnum)。从bicycle和motorear派生出摩托车类(motorcycle)在继承过程中注意把vehicle设置为虚基类。
-
完成下面类中成员函数的定义。
#include
#include
using namespace std;
class str
{private:
char*st;
public:
str(char*a){set(a);}
str&operator=(__________){
delete st;
set(a.st);
return*this;}
void show(){cout<
~str(){delete st;}
void set(char*s) //初始化 st
{_____________;
strepy(st,s); }
};
void main()
{str s1"he"),s2("she");
s1show(),s2show();
s2=s1;
s1show(),s2show();
}
-
#include
#include
struct Worker
{char name[15];//姓名
int age;//年龄
float pay;//工资};
void main(){
Worker x;char*t="LiWei";
int d=28;float f=9000;
strcpy(x.name,t);
x.age=d;x.pay=f;
cout<
}
-
.#include
using namespace std;
class B
{
public:
start(){cout<"B::s() called.\n";}
virtual~B(){cout<<"B::~start()called.\n";}
};
class E:public B
{
public:
E(int i){
cout<<"E::E()called.\n";
buf=new char[i];}
virtual~E()
{
delete[]buf;
cout<<"E::~E()called.\n";
}
private:
char*buf;
};
void fun(B*a)
cout<<"fun()called.\n";
delete a;
}
void main()
{
B*a=new E(15);
fun(a);
}
-
用带有默认参数的函数实现求前两个及三个正整数中的最大数。
#include
using namespace std;
int main()
{int max(int a,int b,int c=0);
int a,b,c,m1,m2;
cin>>a>>b>>C:
____________
m2=max(a,b);__________
cout<<"a,b,c三个正整数中的最大数为:"<
cout<"a,b两个正整数中的最大数为:"<
return 0;
}
intmax(int a,int b,int c)
{if(b>a)a=b;
____________
return a;
}
-
程序实现大写字母转换成小写字母。
#include
void main()
{char a ;
______________;
cin>>a;
if(______________)
a=a+i:
cout<
}
-
程序完成后的运行结果为:DERIVEDBASE
#include
class BASE{
public:
~BASE(){__________}
};
class DERIVED:public BASE{
public:
~DERIVED(){cout<<"DERIVED";}
};
void main()
{__________}
-
程序完成后的运行结果为:*$*$#
#include
using namespace std;
int main()
{int i;
for(i=3;i<=6;i++)
{if(i%3)___________;
else continue;
___________
cout<<"#\n";
return 0;
}
-
#include
using namespace std;
class CTest
{private:
int x;
public:
CTest(int x)
{this->x=x;}
int getX()
{retunx;}
};
int main()
{const CTest obj(5);
cout<
retum0;
}
-
下面的程序在VC6.0上编提示error C2440: 'type cast' :cannot convert from 'class Complex'to 'float',No user-defined-conversion operator available that can perform. this conversion
#include
using namespace std;
class Complex{
public:
Complex(float r=0,float i=0)
{real=r;imag=i;}
void print()
{cout<'('<
private:
float real,imag;
};
int main()
{Complex a(2.2f,4.4f);
a.print();
cout<
return 0;
}
-
改正后程序输出结果为public,class
#include
using namespace std;
void main(){
char*a[5]={"new","class","double","main","public"};
char*p1,*p2;
p1=p2=a[0];
for(int i=;i<5;i++){
if(stremp(a[i],p1)<0)pl=a[i];
if(stremp(a[i],p2)<0)p2=a[i];
}
cout<
}
-
#include
classTest
{int x,y;
public:
fun(int i,int j){x=i;y=j;
show(){
cout<<"x="< x;
if(y)cout<<",=y"<
cout<
};
void main()
{Test a;
a.fun(1);
a.show();
a.fun(2,4);
a.show();
}
-
#include
void main()
{int i,*p;
i=10;
*p=1;
cout<<*p<
}
-
静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是________。
-
在面向对象的程序设计中,将一组对象的共同特性抽象出来形成________。
-
定义重载函数,应该在参数类型或________上有所不同。
-
OOA中使用________映射问题域中的事物。
-
假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为________。
-
函数模板中紧随template之后尖括号内的类型参数都要冠以保留________。
-
与结构成员访问表达式(*fp).score等价的表达式________。
-
构造函数是类中特殊的成员函数,其功能是在________时使用给定的值来初始化对象。
-
对象成员是指该对象所属类中定义的成员,包括数据成员和________。
-
面向对象程序设计将表示属性特征的数据和对数据进行操作的________封装在一起,构成一个完整的对象。
-
类和对象之间的关系是抽象和具体的关系类是对多个对象进行综合抽象的结果,对象是类的________。
-
假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句表达式为Worker*r=________。
-
所谓________成员是指只有类中所提供的成员函数才能直接使用它们任何类以外的函数对它们的访问都是非法的。
-
如果一个派生类只有一个唯一的基类,则称这样的继承关系为________。
-
一个双目运算符作为类的成员函数重载时有________个参数。
-
已知A~Z的ASCⅡ码为65~90,当执行"char ch=14*5+2;cout<
-
假定不允许使用逻辑非操作符,则关系表达式x+y>5的相反表达式为________。
-
表达式float(39)/4的值为________。
-
在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以________识符开始的预处理命令。
-
C++语言中的每条基本语句以________作为结束符。
-
要求打开文件"d:\file.dat",可写入数据,正确的语句是
- A.ifstream infile("d:\file.dat",ios::in);
- B.ifstream infile("d:\\file.dat",ios::in);
- C.ofstream infile("d:\file.dat",ios::out);
- D.fstream 0 infile("d:\\file.dat",ios::in|ios:out);
-
考虑函数原型intfunl(float x,char y="$”,int a=9,char b="@"),下面的函数调用中,属于不合法调用的是()
- A.fun1(3.14)
- B.fun1(3.14,"#")
- C.funl(3.14,"$","@")
- D.funl(3.14,"#",7,"@")
-
下面关于友元的描述中,错误的是()
- A.友元函数可以直接访问该类的私有成员
- B.一个类的友元类中的所有成员函数都是这个类的友元函数
- C.利用友元可以提高程序的运行效率,但却破坏了封装性
- D.友元关系不能被继承,是双向可交换的
-
下列关于类的析构函数的描述中,正确的是()
- A.能带形式参数
- B.函数体中必须有delete语句
- C.可以被重载
- D.无形参,也不可重载
-
作用域运算符"::"的功能是()
- A.标识作用域的级别
- B.指出作用域的范围
- C.给定作用域的大小
- D.标识成员是属于哪个类
-
以下基类中的成员函数表示纯虚函数的是()
- A.virtual void tt()=0;
- B.void tt(int)=0;
- C.virtual void tt(int);
- D.virtual void tt(int){ }
-
假设ClassY:publicX,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为()
- A.X,Y;Y,X
- B.X,Y;X,Y
- C.Y,X;X,Y
- D.Y,X;Y,X
-
若有"int m=5;",则下列表示引用的方法中,正确的是()
- A.int &Z;
- B.int &t=5;
- C.int &X=m;
- D.floa t&f=&m;
-
下列对派生类的描述中,错误的是()
- A.对基类成员的访问必须是无二义性的
- B.派生类至少有一个基类
- C.基类的公有成员在派生类中仍然是公有的
- D.派生类的成员除了它自己的成员外,还包含了它的基类的成员
-
通过下列哪一选项调用虚函数,会采用动态联编()
- A.对象指针
- B.对象名
- C.成员名限定
- D.派生类名
-
决定C++中函数的返回值类型的是()
- A.return语句中的表达式类型
- B.调用该函数时系统随机产生的类型
- C.调用该函数时的主调用函数类型
- D.在定义函数时所指定的类型
-
下列关于静态数据成员的特性叙述中,错误的是()
- A.说明静态数据成员时,使用关键字static进行修饰
- B.静态数据成员要在类外进行初始化
- C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
- D.静态数据成员是所有对象的共享成员
-
下列关于类和对象的叙述中,错误的是()
- A.一个类只能有一个对象
- B.对象是类的具体实例
- C.类是某一类对象的抽象
- D.类和对象的关系是一种数据类型与变量的关系
-
关于成员函数特征的描述中,错误的是()
- A.成员函数一定是内联函数
- B.成员函数可以重载
- C.成员函数可以设置参数的缺省值
- D.成员函数可以是静态的
-
通常的拷贝初始化构造的参数是()
- A.某个对象名
- B.某个对象的成员名
- C.某个对象的引用名
- D.某个对象的指针名
-
定义了指向常量的指针p的选项是()
- A.const int*p;
- B.int*p;
- C.int*const p=&x;
- D.const int*const*p=&x;
-
下列关于析构函数特征的描述中,正确的是()
- A.一个类中能定义一个析构函数
- B.析构函数名与类名不同
- C.析构函数的定义只能在类体内
- D.析构函数可以有一个或多个参数
-
下列关于对象数组的描述中,错误的是()
- A.对象数组的下标是从0开始的
- B.对象数组的数组名是一个常量指针
- C.对象数组的每个元素是同一个类的对象
- D.对象数组只能赋初值,不能被赋值
-
C++语言与C语言相比,在求解问题方法上进行的最大改进是()
- A.面向过程
- B.面向对象
- C.安全性
- D.复用性
-
已知类A中一个成员函数说明"void Set(A&a);",其中A&a的含义是()
- A.指向类A的指针为a
- B.将a的地址值赋给变量Set
- C.a是类A的对象引用,用来作函数Set()的形参
- D.变量A与a按位相与作为函数Set()的参数