private:
inta1,a2;
};
voidfun(A&a)
{
Ab;
b=a;
b.print();
}
voidmain()
{Ax(4,8),y;
Ap(x);
y=x;
fun(p);
y.print();
}
1.该程序调用了几次构造函数(全部)?
(3分)
2.函数fun()中,b.print()输出值是多少?
(3分)
3.该程序调用了几次拷贝构造函数?
(4分)
六.简单回答问题(每小题回答结果写在该题下面空白处;每小题2分,共10分)
1.己知:
inta=10,*pa=&a;定义一个指针pa的引用ref,并计算表达式*ref*8的值。
2..已知:
A类中有一个成员函数说明如下:
intfun(int);
请将该成员函数fun()说明常成员函数,其格式如何?
该函数的功能是返回该参数的平方,写出在类体外定义该函数的语句。
3.使用指针作函数参数和使用引用作函数参数有何不同?
4.在两个不同的类中,A类对象可以赋值给类B的对象,要求A类和B类有什么关系?
5.C++语言中有关函数定义方面与C语言有何不同?
样题1参考答案
二.单选题(每1小题分,共10分)
1.C2.A3.B4.C5.A6.D7.A8.C8.A10.B
三.判断题(每小题0.5分,共10分)
对的有:
2,5,8,9,11,13,14,16,20
三.填空题(每个空1分,共10分)
1.
classA
{
staticinta;
Bb;
public:
A(inti,intj):
B(i,j)
{}
staticvoidf1()
};
2.
classP:
publicQ
{
public:
P(inti,intj):
Q(j)
{p=i;}
friendvoidfun();
private:
intp;
};
四.分析下列程序的输出结果(部分答对酌情给分;每小题全对5分,共30分)
1.34
24
2.
25
3.
7
8
10
25
4.
AB
AB
7,11
6
4
5.
7
8
7
PQ7
PQ7
PQ8
PQ8
6.
15M
13
15M
17M
13M
M
M
N
M
M
五.分析程序回答问题(共10分)
4.该程序调用了几次构造函数(全部)?
(2分)
答:
4次
5.函数fun()中,b.print()输出值是多少?
(2分)
答:
12
6.该程序调用了几次拷贝构造函数?
(2分)
答:
1次
六.简单回答问题(每小题回答结果写在该题下面空白处;每小题2分,共10分)
1.己知:
inta=10,*pa=&a;定义一个指针pa的引用ref,并计算表达式*ref*8的值。
答:
指针pa的引用ref定义如下:
int*&ref=pa;
表达式*ref*8的值:
80
2..已知:
A类中有一个成员函数说明如下:
intfun(int);
请将该成员函数fun()说明常成员函数,其格式如何?
该函数的功能是返回该参数的平方,写出在类体外定义该函数的语句。
答:
常成员函数fun()说明如下:
intfun(int)const;
在类体外该函数定义如下:
intA:
:
fun(inta)const
{
returna*a;
}
3.使用指针作函数参数和使用引用作函数参数有何不同?
答:
使用指针作函数形参时对应实参使用变量或对象的地址值,而使用引用作函数形参时对应实参使用变量或对象值。
4.在两个不同的类中,A类对象可以赋值给B类的对象,要求A类和B类有什么关系?
答:
A类公有继承B类
5.C++语言中有关函数定义方面与C语言有何不同?
答:
C++语言中函数定义肘时,不可缺省函数类型;函数体内说明语句位置不受限制函;数说明使用原型说明;可以定义重载函数;可以定义内联函数;可以设置函教参数的默认值。
样题2试题
一、判断题(对者在题号前划√,错者在题号前划×)(20分)
1.构造函数可以重载。
2.类的数据成员不一定都是私有的。
3.对象数组的元素应是同类的对象。
4.任意一种构造函数都具有转换类型功能。
5.在私有继承中,基类中只有公有成员对派生类是可见的。
6.引用可以作函数参数,不能作函数的返回值。
7.抽象类是不能创建对象的。
8.析构函数是不能被定义为虚函数的。
9.C++语言既支持单继承,又支持多继承。
10.put()函数只能从标准流对象cin中提取字符。
11.引用的值是不可以被改变的,它的值永远是被引用的变量的值。
12.定义一个对象时,系统总会对该对象进行初始化。
13.没有参数的构造函数称为默认构造函数,该构造函数一定是系统自动生成的。
14.在用一个对象给同类的另一个对象赋值时,调用拷贝初始化构造函数。
15.静态对象的成员称为静态成员。
16.友元类中的所有成员函数都是友元函数。
17.this指针是指向对象的指针,是系统自动生成的。
18.运算符new可以创建对象,也可创建对象数组。
19.定义派生类时必须指出基类名和继承方式,二者都不可默认。
20.C++语言对标准文件的读写函数与对磁盘文件的读写函数是一致的。
二、填空题(20分)
1C++语言中,类的继承方式有三种,分别是____________、____________、
_________________。
2定义静态成员使用______________关键字,静态成员是属于_______________的。
3堆对象的创建使用__________运算符,删除使用__________运算符。
4运算符重载的两种方式是___________和____________。
5含有___________的类称为抽象类。
三、单选填空题(20分)
1.关于new运算符的下列描述中,____是错误的。
A.创建对象时必须指定初始值B.用它创建的对象应用delete来删除
C.可用它来创建动态对象D.创建对象时要调用构造函数
2.派生类的对它基类中____成员不可以访问。
A.公有继承的公有B.公有继承的私有
C.公有继承的保护D.私有继承的公有
3.关于派生类的下列描述中_____是错误的。
A.派生类中继承基类成员的访问权限不变B.派生类至少有一个基类
C.派生类还可作另一个派生类的基类D.派生类中包含它基类中的成员
4.下列对重载函数的描述中_____是正确的。
A.运算符重载可以改变结合性B.运算符重载可以改变优先级
C.运算符重载可以改变操作数的个数D.运算符重载不可以改变语法结构
5.在类体内说明虚函数使用的关键字是____。
A.virtualB.friendC.inlineD.static
6.下列关于构造函数的特征中,____是正确的。
A.不可以重载B.不可以设置缺省参数
C.与类名不同D.不说明其类型
7.己知:
类Point中有一个成员函数说明如下
Point&Set(Pointa);
下面对返回值的描述由_____是正确的。
A.该函数无返回值B.该函数返回值是类Point对象
C.该函数返回值是类Point的对象的引用
D.该函数返回值是指向类Point的对象的地址
8.关于动态联编的下列描述中_____是错误的。
A.动态联编是以公有继承为基础的
B.动态联编是在运行中确定所选函数代码的
C.动态联编是在编译时确定所选函数代码的
D.动态联编要有虚函数
9.下列输出字符串”MN”的方法中,_____是正确的。
A.cout<C.cout.put(“MN”);D.cout<10.下列打开磁盘文件的访问方式常量中,____是以读方式打开文件的。
A.outB.inC.ateD.app
四、分析下列程序的输出结果(30分)
1.
#include
classM
{
inta;
public:
M(inti=15){a=i;cout<<"inM\n";}
intgeta(){returna;}
};
voidmain()
{
Mr1,r2(18);
cout<cout<}
2.
#include
classA
{
doublex;
public:
A(doublei){x=i;}
Aoperator+(Ac)
{returnA(x*c.x);}
doubleGetx(){returnx;}
};
voidmain()
{
Aa(0);
a=A(3)+A(4);
cout<}
3.
#include
classP1
{
public:
P1(inti){p1=i;}
virtualintfun(){returnp1;}
private:
intp1;
};
classP2:
publicP1
{
public:
P2(inti,intj):
P1(i),p2(j){}
intfun(){returnp2;}
private:
intp2;
};
voidmain()
{
P1*pf=newP1(10);
P2*pd=newP2(8,18);
P1&b=*pd;
cout<fun()<cout<cout<<(*pd).fun()<deletepf;
deletepd;
}
4.
#include
classA
{
taticintN;
int*a;
public:
A(intk)
{
a=newint[N];
for(intj=0;ja[j]=j+k;
}
intgeta(inti)
{return*(a+i);}
staticintgetN()
{returnN;}
~A()
{cout<<"D\n";delete[]a;}
};
voidmain()
{
Ax(6),y(9);
for(inti=0;i:
getN();i++)
cout<}
intA:
:
N=3;
5.
#include
classR
{
public:
R()
{cout<<"inR\n";}
virtualvoidfun(inti)
{cout<<"R:
"<
char*gun()
{return"HELLO\n";}
};
classT:
publicR
{
public:
voidfun(inti)
{cout<<"T:
"<
};
voidf1(R&a)
{
a.fun(88);
cout<}
voidf2(Ra)
{
a.fun(99);
cout<}
voidmain()
{
Tb1,b2;
f1(b1);
f2(b2);
}
五、简单回答下列问题(10分)
1.什么是友元函数?
它有什么作用?
2.一个类的派生类是否还可以生成新的派生类?
派生类的构造函数是否必须有成员初始化列表?
3.静态数据成员有什么特点?
如何引用静态数据成员?
4.静态联编与动态联编的主要区别是什么?
虚函数是否是动态联编的唯一条件?
5.使用ifstreaminput;写出以读方式打开一个磁盘文件abc.txt的语句。
样题2参考答案
一.判断题(每小题1分,共20分)
对的有:
1,2,3,7,9,12,14,16,17,18,20
二.填空题(每个空2分,共20分)
1.public(公有方式),private(私有方式),protected(保护方式)
2.static,类
3.new,delete
4.成员函数方式,友元函数方式
5.纯虚函数
三.单选题(每小题2分,共20分)
1.A2.B3.A4.D5.A6.D7.C8.C9.