C++考试试卷1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.选择题(每题只有一个最佳答案,每题2分,一共40分)
1. 有关构造函数的说法不正确的是 D 。
A. 构造函数名字和类的名字一样
B.构造函数在说明类变量时自动执行
C. 构造函数无任何函数类型
D.构造函数有且只有一个
2. 有关类的说法不正确的是 D 。
A. 类是一种用户自定义的数据类型
B. 只有类中的成员函数才能存取类中的私有数据
C. 在类中,如果不作特别说明,所指的数据均为私有类型
D. 在类中,如果不作特别说明,所指的成员函数均为公有类型
3. 有关类和对象的说法不正确的是 C 。
A. 对象是类的一个实例
B. 任何一个对象只能属于一个具体的类
C. 一个类只能有一个对象
D. 类与对象的关系和数据类型和变量的关系相似
4. 下面有关重载函数的说法中正确的是 D 。
A. 重载函数必须具有不同的返回值类型
B. 重载函数形参个数必须不同
C. 重载函数名可以不同
D. 重载函数必须有不同的形参列表
5.已知类Sample中的一个成员函数说明如下:
void Set(Sample &a);
其中,Sample &a 的含义是 C 。
A. 指向类Sample 的指针为a
B. 将a的地址值赋给变量Set
C. a是类Sample的对象引用,用来作函数Set()的形参
D. 变量Sample与a按位相与作为函数Set()的参数
6. 一个类的友元函数能够访问该类的 D 。
A.私有成员 B.保护成员 C.公有成员 D.所有成员
7.在私有继承中,基类的公有成员将成为其派生类的 C 成员。
A.公有 B.保护 C.私有 D.静态
8. 类的默认的无参构造函数 D 。
A. 在任何情况下都存在
B. 仅在未定义无参构造函数时存在
C. 仅在未定义有参构造函数时存在
D. 仅在未定义任何构造函数时存在
9. 在C++中,通过 A 的机制可以扩充和完善旧的程序设计以适应新的需要。
A. 继承
B. 封装
C. 多态
D. 重载
10. 虚函数与重载函数的关系以下说法正确的是 D 。
A.重载函数的返回类型及所带的参量可以不同
B.重载函数只要求函数名相同即可
C.虚函数返回类型不同也可
D.虚函数要求函数名、返回类型、参量个数、参量类型和顺序都与基类中原型完全相
同。
11. 有以下类的说明,请指出错误的地方 B 。
class CSample
{
int a=2.5; A
Csample(); B
Public:
CSample(int val); C
~CSample(); D
};
12. 若类Aa和类Bb的定义如下:
class Aa
{
int i,j;
public:
void get();
};
class Bb:Aa
{
int k;
public:
void make();
//…
};
void Bb::make()
{
k=i*j;
}
则上述定义中, D 是非法的表达式。
A. void get();
B. int k;
C. void make();
D. k=i*j;
13. 假设person是一个类,p1是该类的一个对象,p2是指向p1的指针,getname是该类的一个成员函数,则以下不正确的表达是 C 。
A. person.getname()
B. p1.getname()
C. p1.person::getname()
D. p2->getname()
14.有4个类:disp为基类,它含有一个需传递一个参数的构造函数,用它来为其私有成员x赋值,并显示;类a中含有一个disp类的成员对象;类b为类a的派生类,并在其中也含有一个disp类的成员对象;类c是类b的派生类。
类的构造如下,请填写出正确的输出结果。
#include<iostream.h>
class disp
{ int x;
public:
disp(int x){disp::x=x; cout<<”class disp”<<endl;}
};
class a
{ disp dl;
public:
a(int x):dl(x){cout<<”class a”<<endl}
};
class b:public a
{ disp d2;
public:
b(int x):a(x),d2(x){cout<<”class b”<<endl}
};
class c: public b
{ public:
c(int x):b(x)
{cout<<”class c”<<endl;}
};
void main()
{
c obj(5);
}
运行结果为:
(14)A
(15) B
(16) A
(17) C
(18)D
A. class disp
B.class a
C.class b
D.class c
19. 应在下列程序划线处填入的正确语句是
#include<iostream.h>
class Base
{ public:
void fun(){cout<<”Base::fun”<<endl;
};
class Derived:public Base
{ void fun()
{ C
cout<<”Derived::fun”<<endl;
}
}
A. fun();
B. Base.fun();
C. Base::fun();
D. Base->fun();
20. 下面程序哪句是错误的C。
class base{
//…
};
class derive:base{
//…
};
main()
{
base obj1,*ptr1; A
derive obj2; B
ptr1=&obj2; C
ptr1=&obj1; D
//…
}
二.填空题(1,2题3分,2,3,4,5,6,7题各9分,一共60分)
1. 构造函数是个特殊成员函数,用于初始化类的数据成员。
2.派生类从基类私有派生时,基类的共有成员在派生类中是私有成员。
3. swap()函数利用引用作为参数实现两个变量的交换,将程序填写完整。
#include<iostream.h>
void swap( int &x,int &y )
{
int temp;
temp=x;
x=y ;
y=temp;
}
void main()
{
int a,b;
cin>>a>>b;
swap( a,b );
cout<<a<<””<<b<<endl;
}
4. 下面程序的运行结果是 x=6 y=6
x=y
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<”x=y”<<endl;
else
cout<<”x!=y”<<endl;
}
void disp()
{ cout<<”x=”<<x<<”y=”<<y<<endl;}
};
void main()
{
Sample s1(6,6);
S1.disp();
}
#include<iostream.h>
class CSample
{ int n;
static int k;
public:
CSample(int i){n=i;k++;}
void disp();
};
void CSample::disp()
{ cout<<”n=”<<n<<”,k=”<<k<<endl;}
int CSample::k=0;
void main()
{ CSample a(30),b(20),c(10);
a.disp();
b.disp();
c.disp();
6. 下面程序的执行结果为
#include<iostream.h>
class Sample
{
public:
Sample(int i){n=i;}
Operator++(){n++;}
Operator++(int){n+=2;}
Void disp(){cout<<”n=”<<n<<endl;} private:
int n;
};
void main()
{
Sample A(5),B(6);
A++;
++B;
A.disp();
B.disp();
}
7.下面程序的输出结果是
#include<iostream.h>
class base{
public:
void who()
{ cout<<”base!”<<endl; }
};
class derive1:public base{
public:
void who()
{ cout<<”derive1!”<<endl; }
};
class derive2:public base{
public:
void who()
{ cout<<”derive2!”<<endl; }
};
main()
{
derive1 obj2;
derive2 obj3;
p=&obj1;
p->who();
p=&obj2;
p->who();
p=&obj3;
p->who();
obj2.who();
obj3.who();
}
一、填空
1、在定义对象时,_ 静态_ 对象只被构造一次,所有成员以其在类中___申明___的顺序构造
2、一个类的对象所占用的内存空间由它的_数据成员_所占用的空间总和所决定,类的_成员函数__不占用对象的内存空间
3、如果有下面的程序段
class Tdate{
public:
Tdate(){}
//…
}
则语句 Tdate aday;的作用是__声明一个Tdate 对象_
语句 Tdate bday();的作用是_声明一个Tdate的成员函数
二、程序填空
1.仔细阅读下列求两个复数相减的程序,根据程序的输出结果在划线处填入正确语句。
#include<iostream>
#include<cmath>
using namespace std;
class Com_oper;//
class Complex
{
public:
_friend class Com_oper_;
Complex (float a, float b)
{
X=a;
Y=b;
}
void print()
{
cout<<”(”<<X<<”,”<<Y<<”i)”<<endl;
}
private:
float X,Y;
};
class Com_oper
{
public:
float Sub(Complex &p, Complex &q);
};
Complex Com_oper:: Sub(Complex &p, Complex &q)
{
Complex result:
__result.X = p.X – q.X__;
__ result.Y = p.Y – q.Y ___________;
return result;
}
int main()
{
Complex p(10,20),q(30,40);
Com_oper oper;
oper.Sub(p,q);
return 0;
}
三、程序阅读
请分析下面的程序并给出该程序的执行结果。
1 #include <iostream.h>
class AA
{
public:
AA() { cout<<”Initualizing AA!\n”; }
~AA() { cout<<”Destroying AA!\n”;
private:
int a;
};
class BB
{
public:
BB() { cout<<”Initualizing BB!\n”; }
~BB() { cout<<”Destroying BB!\n”;};
private:
int b;
AA p;
};
void main()
{ BB X;
cout<<”Ending main!\n”;
}
2 #include <iostream >
using namespace std;
class AA
{
public:
static int n;
AA() { n++; }
};
int AA::n=0;
void main()
{
cout<<”AA::n=”<<AA::n<<endl;
AA d1;
AA d2;
cout<<<”d2.n=” << AA::n << endl;
AA d3;
cout<<<”d3.n=” << d1.n << endl;
}
答案:一.选择题1.D 2.B 3.C 4.D 5.C 6.D 7.C 8.D 9.A
10.D 11.B 12.D 13.C 14.A 15.B 16.A 17.C 18D 19.A 20.C。