自考C++程序设计模拟试题及答案(七)
-
写一个程序,定义一个抽象类Shape,由它派生3个类Square(正方形),Trapezoid(梯形)和Triangle三角形。用虚函数分别计算几种图形面积并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
#include
class Shape
{public:
virtual double area()const=0;
};
-
给出下面程序的输出结果。
#include
class A
{private:
int a;
public:
void set(int x){a=x;}
void show()cout<<"a="<
};
class B:public A
{private:
int b;
public:
void set(int x=0){A::set(x);b=x+10;}
void set(int x,int y){A::set(x);b=y;}
void show(){A::show();cout<<"b="<
};
void main()
{B b;
b.set(10);b.show();
b.set(30,50);b.show();
}
-
给出下面程序的输出结果。
#include
template
class Num
{T x,y;
public:
Num(T i,T j=0){x=i;y=j;}
void set(T i,T j=0){x=i;y=j;}
void show()
{cout<
if(y!=0)
cout<<(y>0'+':'-')<<(y>0?y:-y)<'i';
cout<
}
};
void main()
{Num
n(1); n.show();
n.set(2,3);
n.show();
Num
m(3,-4); m.show();
}
-
一个类的头文件如下所示,num初始化值为5,程序产生对象T,且修改num为10,并使用show()函数输出num的值10。
#include
class Test
{private:
static int num;
public:
Test(int);
void show();
};
_________
Test:: Test(int n)
{num=n;}
void Test::show()
{cout<
void main()
{Test t(10);
_________
}
-
下面程序段用来求三角形的面积,首先进行判断,三边不符合组成三角形时,返回-1;符合时输出三角形面积。
#include
#include
double area(double a,double b,double c)
{if (_________)
Return -1;
else
{
double ar,1;
1=(a+b+c)/2;
ar=sqrt(1*(1-a)*(1-b)*(1-c));
retum ar;
}
}
void main()
{double i=0,j=0,k =0;
Cout<<”输入三角形三边:”;
cin>>i>>j>>k;
double s=area(i,j,k);
if(s<0)
cout<<"不是三角形"<
else
__________
}
-
在下面横线处填上求两个浮点数之差的cha函数的原型声明、调用方法。
#include
using namespace std;
void main()
{float a,b;
_________//函数cha的原型声明
a=12.5;
b=6.5;
float c=_________;//调用函数cha
cout<
}
float cha( float x, float y)
{float w;
w=x-y;
return w;
}
-
下面程序中用来求数组和。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为s=150。
#include
class Arr
{int*a,n;
public:
Arr():a(0),n(0){}
Arr(int*aa,int nn)
{n=nn;
a=new int[n];
for(int i=0;i
*(a+i)=*(aa+i);
}
~Arr(){deletea;}
____________
{return*(a+i);}
};
void main()
{int b[5]={10,20,30,40,50}
Arr a1(b,5);
int i=0,s=0;
____________
s+=a1.GetValue(i);
cout<<"s="<
}
-
#include
class Base
{protected:
int x;
public:
virtual void fun()=0;
}
class Derived:public Base
{int z;
public:
Derived(int i){z=5;}
void fun()
cout<<"派生类fun():"<<"z="<
};
void main()
Derived b(5);
Base*p=new Base(6);
p= &b;
p->fun();
}
-
写出模板函数实现数值型数组元素值按从小到大排序的程序。
#include
using namespace std;
____________
void sort(Tb[ ],int n)
{T temp;
int i,j;
T*a=newT[n];
for(i=0;i
{a[i]=b[i];}
for(i=0;i
{for(j=i+;j
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i
{cout<
cout<
delete a;
}
void main()
{int i,n=6;
int a[]={5,1,9,10,3,8}
sort___________;
for(i=0;i
{cout<
cout<
}
-
#include
class A
{private:
int x;
protected:
int y;
public:
A(int i,int j){x=i;y=j;}
};
class B:public A
{public:
B(int a,int b):A(a,b){}
void show()cout<
};
void main()
{B b(8,9);
B.show();
}
-
#include
class A
{private:
int a;
public:
void func(B &);
A(int i){i=a;}
};
class B
{private:
int b;
friend void A::func(B&)
public:
B(int i){b=i;}
};
void::func(B&r)
{a=r.b;
cout<
}
void main()
{B bt(3);
A at(10);
at.func(bt);
}
-
#include
void main()
{int i(3),j(8);
Int*const p=&i;
cout<<*p<
p=&j;
cout<<*p<
}
-
开发一个C++语言程序的步骤通常包括编辑、_________、连接运行和调试。
-
#include
#include
class Bas
{public:
Bas(char*s="\0"){strcpy(name,s);}
void show();
protected:
char name[20];
};
Bas b;
void show()
{cout<<”name:”<
void main()
Bas d2("hello");
Show();
}
-
设类A有成员函数void f(void);,若要定义一个指向类成员函数的指针变量pf来指向f该指针变量的声明语句是_________。
-
如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。
-
文件流类的________成员函数的功能是打开一个文件。
-
在C++中,利用向量类模板定义一个具有20个int的向量A,其元素均被置为5,实现操作的语句是_______。
-
表达式cout<<hex还可表示为________。
-
C++类的_________函数名与类名称一样,且没有返回值。
-
________可以视为是单一继承的扩展。
-
类模板用来表达具有__________的模板类对象集。
-
在C++中,访问指针所指向的对象的成员使用________运算符。
-
执行_________操作将释放由指针所指向的动态分配的内存空间。
-
定义虚函数所用的关键字是_________。
-
在C++中,虚函数帮助实现了类的_________。
-
一个抽象类的派生类可以实例化的必要条件是实现了所有的_________。
-
若要把 FriendClass定义为类 Myclass的元类,则应在类 MyClass的定义中加人语句_________。
-
对数组进行升幂排序、反转、复制数组的内容等操作需要包含头文件_______。
-
如果调用函数时,需要改变实参或者返回多个值,应该采取_______方式。
-
假定AB为一个类,则语句AB(int i=0);为该类_________函数的原型说明。
-
语句序列ifstream infile;infile.open("data.dat");的功能可用一个语句实现,这个语句是_________。
-
C++程序一般可以分为4个部分:程序的主函数、全局说明、_______和用户自定义的函数。
-
将一个函数声明为内联函数时所使用的关键字为()
- A.signed
- B.short
- C.const
- D.inline
-
设存在函数intsum(int,int)返回两个参数的和,若求2045100三个数的和,下列表达式不正确的是()
- A.int m=sum(20,45,100);
- B.int m=sum(sum(20,45),100)
- C.int m=sum(20,sum(45,100))
- D.int m=sum(45,sum(20,,100))
-
基类的protected成员,通过protected派生,其在派生类中为()
- A.public
- B.private
- C.protected
- D.不可访问
-
已知f和g是同一类中的两个成员函数,若f的实现代码体内不能调用g则可能的情况是()
- A.f和g都是常成员函数
- B.f是常成员函数,g不是
- C.f不是常成员函数,g是常成员函数
- D.g和f都不是常成员函数
-
下列有关重载函数的说法中正确的是()
- A.重载函数必须具有不同的返回值类型
- B.重载函数参数个数必须相同
- C.重载函数必须有不同的形参列表
- D.重载函数名可以不同
-
下列对派生类的描述中,错误的是()
- A.一个派生类可以作为另一个派生类的基类
- B.派生类至少有一个基类
- C.派生类的默认继承方式是private
- D.派生类只继承了基类的公有成员和保护成员
-
C++类体系中,不能被派生类继承的有()
- A.常成员函数
- B.构造函数
- C.虚函数
- D.静态成员函数
-
下列各项不是C++中的标准设备名的是()
- A.stdin
- B.cout
- C.clog
- D.cerr
-
建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序为()
- A.自己所属类、对象成员所属类、基类的构造函数
- B.对象成员所属类基类自己所属类的构造函数
- C.基类、对象成员所属类、自己所属类的构造函数
- D.基类、自己所属类、对象成员所属类的构造函数
-
下列关于构造函数的描述中,错误的是()
- A.构造函数可以设置默认的参数
- B.构造函数在定义类对象时自动执行
- C.构造函数可以是内联函数
- D.构造函数不可以重载
-
继承机制的作用是()
- A.信息隐藏
- B.数据封装
- C.定义新类
- D.数据抽象
-
下列关于构造函数的描述中,错误的是()
- A.构造函数可以设置默认参数
- B.构造函数在说明类对象时自动执行
- C.构造函数可以对静态数据成员进行初始化
- D.构造函数可以重载
-
下列关于运算符重载的描述中,正确的是()
- A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符
- B.一元运算符只能作为成员函数重载
- C.二元运算符重载为非成员函数时,参数表中有一个参数
- D.C++中可以重载所有的运算符
-
C++中注释“∥”的有效范围是()
- A.从“∥”开始到行尾
- B.从“∥”开始到下一个“∥”
- C.“∥”及其后一个字符
- D.从“∥”开始到程序尾
-
下列哪种默认参数的声明是不正确的()
- A.int max(int a,int b,int c, int d=0);
- B.int max(int a,int b,int c=0,int d=0);
- C.int max(int a=0,int b,int c=0,int d=0);
- D.int max(int a,int b=0,int c=0,int d=0);
-
下列模板定义中不正确的是()
- A.template
Q F(Q x) {returnQ+x;} - B.template
F (Q x){returnx+x;} - C.template
T F(T x){returnx*x;} - D.template
T F(T x){return x;}
- A.template
-
语句int*p=&k;定义了指针p,与这个语句等效的语句序列是()
- A.int *p;p=&k;
- B.int *p;p=k;
- C.int *p;p*=&k;
- D.int *p;*p=k;
-
下列选项中不是C+关键字的是()
- A.bool
- B.operator
- C.inc
- D.friend
-
假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete[]px;语句时调用该类析构函数的次数为()
- A.0
- B.1
- C.n
- D.n+1
-
对于类中的成员,使用protected修饰,表明该成员的访问权限是()
- A.公有的
- B.私有的
- C.保护的
- D.不可见