自考C++程序设计2016年4月试题及答案解析
-
定义一个图形类(figure),其中有保护类型的成员数据:高度(height)和宽度(width),一个公有的构造函数。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含一个函数area( ),分别用来计算矩形和等腰三角形的面积。其中,主函数已给出,请完成其他部分的代码。
int main( )
{
triangle tri(2, 3);
rectangle rec(2, 3);
cout ﹤﹤"The area of triangle is: "﹤﹤ tri. area( )﹤﹤endl;cout ﹤﹤"The area of rectangle is: "﹤﹤rec. area( )﹤﹤ endl;return 0;
}
-
#include ﹤iostream﹥
using namespace std;
class CBase
{
public:
void fun( );
};
void CBase:: fun( )
{cout﹤﹤"调用基类类的函数fun( )\n";}
class CDerived:
public CBase
{public:void fun( );
};
void CDerived:: fun( )
{ cout﹤﹤"调用派生类的函数fun( )\n”;
}
void main( )
{
CDerived d1;
CBase *pd=&d1;
CBase &pd=d1;
d1. fun( );
pb-﹥fun( );
pd.fun( );
}
-
#include ﹤iostream﹥
using namespace std;
int a[ ]={2,4,6,7,10};
int &index( int i)
{ retum a[i]; }
void main( ) {
int i;
_________
//调用 index函数,将数组a中的元素7替换为8
for( _________ ) //输出数组a
cout﹤﹤a[i]﹤﹤" ";
}
-
#include ﹤iostream﹥
#include ﹤strinh﹥
#include ﹤iomanip﹥
using namespace std;
class student
{
char name[ 8];
int deg;
char level[7];
friend class process; //说明友元类
public:
student( char na[ ],
int d)
{
strcpy(name,na);
deg=a;
}
};
class process
{
public:
void trans( student &s)
{
int i=s. deg/10;
switch(i)
{
case 9:
strcpy(s. level, "优"); break;
case 8:
stecpy(s. level, "良"); break;
case 7:
strcpy(s. level, "中"); break;
case 6:
strcpy(s. level, "及格");
break;default:
strcpy(s. level, "不及格"); break;
}
}
void show( student &s)
{cout ﹤﹤setw(10)﹤﹤s.name﹤﹤setw(4)﹤﹤s. deg﹤﹤ setw(8)﹤﹤s.level﹤﹤ endl;}
};
void main( )
{student st[ ]={ student("Jack", 78), student ("Lucy",92),student("Lily", 62), student("Tom", 99 )};
process p;
cout﹤﹤"结果:"﹤﹤"姓名"﹤﹤setw(6)﹤﹤"成绩"﹤﹤sew(8)﹤﹤"等级"﹤﹤endl;
for(int i=0; i ﹤4;i++)
{
p. trans(st[i]);
p. show(st[i]);
}
}
-
任意输入10个同学的成绩,计算其平均成绩。要求用函数average( )计算平均成绩。主函数输入数据并输出结果。
#include "stdafx.h"
#include ﹤iostream﹥
using namespace std;
void main(void)
{
float average(float a[ ]);
float score[10];
for( _________ )
{
cin﹥﹥score[i];
}
cout ﹤﹤"average: "﹤﹤ average( score)﹤﹤endl;
}
float average( float a[ ])
{
float sum =0;
for( int i=0; i﹤10; i ++)
{
_________
}
return (sum/10);
}
-
下面程序中Base是抽象类。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:Der1 called!
Der2 called!
#include ﹤ iostream. h﹥
class Base
{ public:
_________;
};
class Der1: public Base
{ public:
void display( ) { cout ﹤﹤"Der1 called! "﹤﹤endl; }
};
class Der2: public Base
{ public:
void display( ) { cout ﹤﹤"Der2 called! "﹤﹤endl; }
};
void fun( _________ )
{ p-﹥display( ); }
void main( )
{ Der1 b1;
Der2 b2;
Base * p=&b1;
fun(p);
p=&b2;
fun(p);
}
-
完成下面类中成员函数的定义。
#include ﹤iostream﹥
#include ﹤string﹥
using namespace std;
class str
{ private:
char * st;
public:
str(char *a)
{
set (a);
}_________ //运算符“=”重载函数
{
delete st;set(a.st);
return * this;
}
void show( )
{
cout ﹤﹤ st ﹤﹤ endl;
}
~str( )
{ delete st; }
void set(char *s);
{
_________strcpy( st, s);
}
};
void main( );
{
str s1("hello"),
s2("world");
s1. show( ),
s2.show( );
s2=s1;
s1. show( ),
s2.show( );
}
-
Test_Static类内有一静态成员变量num,且初始值设为15。
#include ﹤iostream﹥
using namespace std;
class Test_Static
{
private:_________
public:
Test_Static(int);void print( );
};_________
Test_Static:: Test_Static(int n)
{
num=n;
}
void Test_Static:: print( )
{
cout﹤﹤num﹤﹤endl;
}
void main( )
{
Test_Static ts(10);ts.print( );
}
-
#include ﹤iostream﹥
using namespace std;
int main( )
{
int a= 10;
int *p1=NULL;
int *p2=a;
cout ﹤﹤p1﹤﹤*p2﹤﹤endl;
return 0;
}
-
#include ﹤iostream﹥
using namespace std;
void main( )
{
int x1(3), x2(8);
int * const p =&x1;
cout ﹤﹤*p﹤﹤ endl;
p=&x2;
cout ﹤﹤*p﹤﹤ endl;
}
-
#include ﹤iostream﹥
using namespace std;
class INTEGER
{
public:
INTEGER(int a){ this -﹥a=a;
}
protected:
int a;friend void Print( const INTEGER& obj);
};
void INTEGER:: Print( const INTEGER & obj)
{
cout ﹤﹤ obj. a;
}
void main( )
{
INTEGER obj(4);
Print(obj);
}
-
#include ﹤iostream﹥
using namespace std;
void setzero( int &a) {
a=0;
}
int main( ) {
int x1=10; x2=20;
setzero(x1);
etzero(x2);
cout ﹤﹤x1 ﹤﹤x2 ﹤﹤endl;
return 0;
}
-
#include ﹤iostream﹥
#include ﹤string﹥
using namespace std;
class Base
{
public:
Base(const char *na){strcpy( name, na); }
private:
char name [80];
};
class Derived: public Base
{ public:
Derived( const char *nm): Base(nm) { }
void show( );
};
void Derived: :show( )
{ cout﹤﹤"name:"﹤﹤name﹤﹤endl;
}
void main( )
{ Derived b1("B");
b1. show( );
}
-
下面程序运行的结果是_________。
#include ﹤iostream. h﹥
void main( ) {
cout. fill('*');
cout. width(6);
cout ﹤﹤"hello"﹤﹤ endl;
cout. clear( ); }
-
举出C++中两种代码复用的方式:_________、复用。
-
为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是与_________配对。
-
C++程序的编译是以_________为单位进行的。
-
重载函数在参数类型或参数个数上不同,但_________必须相同。
-
已知有20个元素int类型向量V1,若用Ⅵ1初始化为V2向量,语句是_________。
-
语句序列fstream infile;infile. open("data. dat");的功能可用一个语句实现,这个语句是_________。
-
假设int a=1, b=2; 则表达式(++a/b)*b--的值为_________。
-
C++程序的源文件扩展名为_________。
-
在C++中,有两种给出注释的方法。一种是沿用C语言的注释符,即/**/。另一种是从它开始,直到它所在行尾的字符都为注释的注释符,即_________。
-
使用new为int数组动态分配10个存储空间是_________。
-
C++流库预定义了4个流,它们分别是cin、cout、clog和_________。
-
C++支持两种多态性:_________时的多态性和运行时的多态性。
-
在用class定义一个类时,数据成员和成员函数的默认访问权限是_________。
-
重载的运算符保持其原有的操作数、_________和结合性不变。
-
执行下列代码string str("NihaoC++");cout﹤﹤str. substr(5,3);程序的输出结果是_________。
-
C++中有两种继承:单一继承和_________。
-
抽象类中至少要有一个_________函数。
-
vector类中用于删除向量中的所有对象的函数是_________。
-
已知:fun( )函数是一个类的常成员函数,它无返回值,下列表示中,是正确的是( )
- A.void func( ) const;
- B.const void func( );
- C.void const func( );
- D.void func( const);
-
_________通常使用对象的引用来初始化创建中的对象。
-
关于this指针的说法错误的是( )
- A.this指针必须显式声明
- B.当创建一个对象后,this指针就指向该对象
- C.动态成员函数拥有this指针
- D.静态成员函数不拥有this指针
-
已知类A是类B的友元,类B是类C的友元,则( )
- A.类A一定是类C的友元
- B.类C一定是类A的友元
- C.类C的成员函数可以访问类B的对象的任何成员
- D.类A的成员函数可以访问类B的对象的任何成员
-
已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确的是( )
- A.A1.p=5;
- B.A1-﹥p=5;
- C.A1.*p=5;
- D.*A1.p=5;
-
以下能正确定义数组并正确赋初值的语句是( )
- A.int N=5, b[N][N];
- B.int a[2]={{1},{3},{4},{5}};
- C.int c[2][ ]={{1,2},{3,4}};
- D.int d[3][2]={{1,2},{3,4}};
-
关于函数模板,描述错误的是( )
- A.函数模板必须由程序员实例化为可执行的函数模板;
- B.函数模板的实例化由编译器实现;
- C.一个类定义中,只要有一个函数模板,则这个类是类模板;
- D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化;
-
按照标识符的要求,不能组成标识符的是( )
- A.连接符
- B.下划线
- C.大小写字母
- D.数字字母
-
下列运算符中,在C++语言中不能重载的是( )
- A.*
- B.﹥=
- C.::
- D./
-
在编译指令中,宏定义使用哪个指令( )
- A.#if
- B.#include
- C.#define
- D.#error
-
假定一个类的构造函数为A(int aa, int bb) { a=aa++; b=a*++bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为( )
- A.4和5
- B.4和20
- C.4和24
- D.20和5
-
以下基类中的成员函数表示纯虚函数的是( )
- A.virtual void vf(int)
- B.void vf(int)=0
- C.virtual void vf( )=0
- D.virtual void yf( int) { }
-
实现两个相同类型数加法的函数模板的声明是( )
- A.add(T x, T y)
- B.T add(x, y)
- C.T add(T x, y)
- D.T add(T x,T y)
-
如果表达式++a中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )
- A.operator ++(1)
- B.operator ++(a)
- C.operator ++(a, 1)
- D.operator ++( )
-
类Cat是类Animal的公有派生类,类Animal和类Cat中都定义了虚函数func( ),p是一个指向类Animal对象的指针,则p-﹥Animal:: func( )将( )
- A.调用类Animal中的函数func( )
- B.调用类Cat中的函数func( )
- C.根据p所指的对象类型而确定调用类Animal中或类Cat中的函数func( )
- D.既调用类 Animal中函数,也调用类Cat中的函数
-
通常拷贝构造函数的参数是( )
- A.某个对象的成员名
- B.某个对象的指针名
- C.某个对象的引用名
- D.某个对象名
-
下列不是类的成员函数的( )
- A.友元函数
- B.构造函数
- C.析构函数
- D.拷贝构造函数
-
适宜采用inline定义函数情况是( )
- A.函数体含有循环语句
- B.函数体含有递归语句
- C.函数代码多、不常调用
- D.函数代码少、频繁调用
-
下列关于对静态数据成员的描述中,正确的是( )
- A.静态数据成员不能用 public控制符修饰
- B.静态数据成员可以直接用类名或者对象名来调用
- C.静态数据成员不可以被类的对象调用
- D.静态数据成员不能用 private控制符修饰
-
要求指针p既不可修改其本身的内容,也不可修改其所指向地址的内容,定义正确的( )
- A.const char *p="ABCD";
- B.char *const p="ABCD";
- C.char const *p="ABCD";
- D.const char * const p="ABCD";
-
在C++中,类与类之间的继承关系具有( )
- A.自反性
- B.对称性
- C.传递性
- D.反对称性