一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的。)10. 类MyClass的定义如下:
class MyClass
{
public:
MyClass(){}
MyClass(int i){value=new int(i);}
int*value;
};
若要对value赋值,则下面语句正确的是
- A.MyClass my;my.value=10;
- B.MyClass my;*my.value=10;
- C.MyClass my;my.*value=10;
- D.MyClass my(10);
A B C D
二、填空题1. 执行下列代码
double pi=3.141592;
cout<<setprecision(1)<<pi;
程序的输出结果是______。
2. 要使用STL库提供的对数组进行升幂排序算法,在源程序中需要包含的头文件是______。
3. C++语言中动态回收内存的关键字是______。
4. 执行下列代码
int b=100;
cout<<"Oct:"<<oct<<b;
程序的输出结果是______。
5. C++语言中用于定义一个类的关键字是______。
6. 为了使用C++语言标准程序库提供的string类,在程序中必须使用的文件包含命令是______。
7. 在程序中执行int*a=new int之后,若a为空指针,则表明______。
8. C++函数中传递对象地址值是使用______作为参数。
9. 将指向对象的指针作为函数参数,形参是对象指针,实参是对象的______。
10. C++函数有库函数(标准函数)和______两类。
11. C++中通过______对类的对象进行初始化。
12. UML中实例连接反映对象之间的静态关系,消息连接描述对象之间的______关系。
13. 若将一个对象说明为常对象,则通过该对象只能调用它的______成员函数,不能调用其他成员函数。
14. 静态成员函数是______的成员,不是对象的成员。
15. 私有继承时,在派生类中基类的protected权限变为______。
16. 若使用一个表达式的含义能解释为访问多个基类中的成员,则这种对基类成员的访问就是不确定的,称这种访问具有______。
17. 如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生______静态变量。
18. vector类中用于获取向量可以容纳最多对象的个数的方法是______。
19. C++用于运算符重载的关键字是______。
20. 含有______的类称为抽象类,它只能作为基类来使用。
三、改错题1. #include<iostream.h>
class test1{
private:
int x;
public:
test1(){x=2;}
void set(int a){x=a;}
void get(){cout<<x<<endl;}
};
class test2{
private:
int x;
public:
test2(){x=3;}
void set(int a){x=a;}
void get(){cout<<x<<endl;}
};
class test:public test1,public test2{
private:
int x;
public:
void set(int a){x=a;}
void gettest(){cout<<x<<endl;}
};
void main(){
test a;a.get();
}
a.get();
get()存在二义性,使用时需要指出使用哪个基类的函数,例:a.test1::get()
2. #include<iostream.h>
class test{
private:
int x,y;
public:
void test1(int a,int b){x=a;y=b;}
int max();
};
int test:max(){if(x>y)return x;else return y;}
void main(){
test a;
a.test1(1,3);
cout<<a.max()<<endl;
}
int test:max()
成员函数定义时用"::"
3. #include<iostream.h>
void main(){
int x=5;
const int*const p=&x;
*p=88;
cout<<*p<<endl;
}
*p=88;
指向常量的常量指针不能进行左值或赋值操作
4. #include<iostream.h>
class point
{
private:
float x,y;
public:
f(float a,float b){x=a;y=b;}
f(){x=0;y=0;}
void getx(){cout<<x<<endl;}
void gety(){cout<<y<<endl;}
}
class point1
{
private:
float x,y;
public:
f(float a,float b){x=a;y=b;}
f(){x=1;y=1;}
void get:x(){cout<<x<<endl;}
void gety(){cout<<y<<endl;}
};
main(){
point a;
a.f();
a.getx();a.gety();
}
}(类point声明结束处)
类声明结束后用";"结束
5. #include<iostream>
using namespace std;
void main(){
string str1("we are here");
cout<<str1<<endl:
}
string str1
没有加头文件<string>
四、完成程序题1. 在下面程序的下划线处填上正确的数据类型,保证程序具有如下输出结果:
0
17
17,17,17
源程序如下:
#include<iostream>
using namespace std;
class base
{
public:
______num;
base(){}
};
int base::num=0:
void main()
{
cout<<base::nuin<<endl;
______*p=&base::num;
*p=17;
cout<<base::num<<endl;
base a,b;
cout<<*p<<","<<a.num<<","<<b.num;
}
2. 在下面横线处填上正确的内容,完成类的定义。
class Base
{
int x;
static const int b;
public:
Base(int,int);
const int &a;
};
______b=15;
Base::Base(int i,int j):______{}
const int Base::
x(i),a(j)或x(j),a(i)
3. 完成下面程序中的show函数的定义,使其运行结果如下:
In base
In derived
程序清单如下:
#include______
using namespace std;
class base
{
public:
virtual void print()
{
cout<<"In base"<<endl;
}
};
class derived:public base
{
public:
void print(){cout<<"In derived"<<endl;}
};
void show(base*pb,void(base::*pf)())
{
______
}
void main()
{
base b;
derived d;
show(&b,base::print);
show(&d,base::print);
}
4. 在下面程序的下划线处填上正确的语句。
#include<iostream>
using namespace std;
template<class T>
T f(T&a,T&b,int n)
{
for(int i=0;i<n;i++)
a[i]=a[i]+b[i];
return a;
}
void main()
{
int a[5]={1,2,3,4,5};
int b[5]={100,200,3,4,5},*p;
for(int i=0;i<2;i++)
p=______;//调用函数f
for(;p<a+5;p++)
cout<<______<<endl;
}
5. 下型程序将x,y,z按从小到大的顺序排列并将结果返回给实参,在横线处填入正确的内容。
template<class T>
void order(______)
{
______;
if(x>y){a=x;x=y;y=a;}
if(y>z){a=y;y=z;z=a;}
if(x>y){a=x;x=y;y=a;}
}
T&x,T&y,T&z(有没有空格都可以)
T a
五、程序分析题1. 给出下面程序的输出结果
#include<iostream>
using namespace std;
template<class T>
T F(T x)
{
return x>5;
}
void main()
{
int a=15;
cout<<F(a)<<"\n";
double b=-5.8976;
cout<<F(b)<<"\n";
cout<<F(5)<<"\n";
}
2. 给出下面程序的输出结果
#include<iostream>
using namespace std;
class A
{
private:
int X,Y;
public:
A(int myx,int myy){X=myx;Y=myy;}
void show(){cout<<"X="<<X<<"Y="<<Y<<endl;}
};
class B:public A
{
private:
int H,W;
public:
B(int myx,int myy,int myh,int myw):A(myx,myy){H=myh;W=myw;}
void show(){cout<<"H="<<H<<";W="<<W<<endl;}
};
void main()
{
B d(1,2,3,4);
d.show();
}
六、程序设计题1. 定义队列类模板queue(先进先出),队列的大小由使用者确定。要求该类模板对外提供如下二种基本操作:(1)insert(入队列)(2)front(出队列),用数组来实现
#include<iostream>
using namespace std;
template<class T,int size>
class queue{
T x[size];
int current,front,rear;
public:
queue(){current=0;front=0;rear=0;}
....insert(....);
....front(....);
};
请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型)
void queue<T,size>::insert(T t){
if(current= =size)
{cout<<"queue overflow!"<<endl;exit(0);}
else{x[rear]=t;(current++);(rear++)%size;}
}
T queue<T,size>::front(){
if(current= =0){
cout<<"deleting from an empty queue!"<<endl;exit(0);}
else{T a=x[front];current--;(front++)%size;return a;}
}