};}
C.classP{D.classP{
intf;public:
};inta;
f=25;voidSeta(intx){a=x;}
};
5.拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的
B.拷贝构造函数只有一个参数,并且是该类对象的引用
C.拷贝构造函数是一种成员函数
D.拷贝构造函数的名字不能用类名
6.关于静态成员的描述中,()是错误的。
A.静态成员可分为静态数据成员和静态成员函数
B.静态数据成员定义后必须在类体内进行初始化
C.静态数据成员初始化不使用其构造函数
D.静态数据成员函数中不能直接引用非静态成员
7.关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内
B.友元函数可直接访问类中的私有成员
C.友元函数破坏封装性,使用时尽量少用
D.友元类中的所有成员函数都是友元函数
8.对类的构造函数和析构函数描述正确的是()。
A. 构造函数可以重载,析构函数不能重载
B. 构造函数不能重载,析构函数可以重载
C. 构造函数可以重载,析构函数也可以重载
D. 构造函数不能重载,析构函数也不能重载
9.类的析构函数的作用是(D)。
A.一般成员函数B.类的初始化C.对象初始化D.删除对象
10.假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。
A.OneClass(OneClassp);B.OneClass&(OneClassp);
C.OneClass(OneClass&p);D.OneClass(OneClass*p);
11.下面对于友元函数描述正确的是()。
A.友元函数的实现必须在类的内部定义
B.友元函数是类的成员
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员
12.对于结构中定义的成员,其默认的访问权限为()。
A.publicB.protectedC.privateD.static
13.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。
A.publicB.protectedC.privateD.static
14.下面对静态数据成员的描述中,不正确的是()。
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以在类体内进行初始化
C.静态数据成员不能受private控制符的作用
D.静态数据成员调用前必须初始
15.下面对静态数据成员的描述中,正确的是()。
A.静态数据成员是类的所有对象共享的数据
B.类的每一个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象调用
16.下列有关类的说法不正确的是。
A.类是一种用户自定义的数据类型
B.只有类中的成员函数或类的友元函数才能存取类中的私有数据
C.在类中(用class定义),如果不作特别说明,所有的数据均为私有数据
D.在类中(用class定义),如果不作特别说明,所有的成员函数均为公有数据
17.以下有关析构函数的叙述不正确的是()
A.在一个类只能定义一个析构函数B.析构函数和构造函数一样可以有形参
C.析构函数不允许用返回值D.析构函数名前必须冠有符号“~”
18.以下有关类与结构体的叙述不正确的是()
A.结构体中只包含数据;类中封装了数据和操作
B.结构体的成员对外界通常是开放的;类的成员可以被隐藏
C.用struct不能声明一个类型名;而class可以声明一个类名
D.结构体成员默认为public;类成员默认为private
19.以下叙述中不正确的是()
A.一个类的所有对象都有各自的数据成员,可以共享函数成员
B.一个类中可以有多个同名的成员函数
C.一个类中可以有多个构造函数、多个析构函数
D.在一个类中可以声明另一个类的对象作为它的数据成员
20.以下不属于构造函数特征的是()
A.构造函数名与类名相同B.构造函数可以重载
C.构造函数可以设置默认参数D.构造函数必须指定函数类型
21.以下有关类和对象的叙述不正确的是()
A.任何一个对象都归属于一个具体的类
B.类与对象的关系和数据类型与变量的关系相似
C.类的数据成员不允许是另一个类的对象
D.一个类可以被实例化成多个对象
22.设有定义:
classperson
{intnum;
charname[10];
public:
voidinit(intn,char*m);
...
};
personstd[30];
则以下叙述不正确的是()
A.std是一个含有30个元素的对象数组
B.std数组中的每一个元素都是person类的对象
C.std数组中的每一个元素都有自己的私有变量num和name
D.std数组中的每一个元素都有各自的成员函数init
23.设有以下类的定义:
classEx
{intx;
public:
voidsetx(intt=0);
};
若在类外定义成员函数setx(),以下定义形式中正确的是()
A.voidsetx(intt){...}
B.voidEx:
:
setx(intt){...}
C.Ex:
:
voidsetx(intt){...}
D.voidEx:
:
setx(){...}
24.以下关于静态成员变量的叙述不正确的是()
A.静态成员变量为类的所有对象所公有
B.静态成员变量可以在类内任何位置上声明
C.静态成员变量的赋初值必须放在类外
D.定义静态成员变量时必须赋初值
25.定义静态成员函数的主要目的是()
A.方便调用B.有利于数据隐藏
C.处理类的静态成员变量D.便于继承
26.以下叙述不正确的是(),使用静态数据成员:
A.可以节省内存空间B.是为了解决数据共享问题
C.可以直接用类名来引用D.可以提高序运算速度
二、填空题(共18分,每题1分)
1.设有如下程序结构:
classBox
{…};
voidmain()
{BoxA,B,C;}
该程序运行时调用次构造函数;调用次析构函数。
2.设A为test类的对象且赋有初值,则语句testB(A);表示。
3.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为的成员;若要访问其他成员变量,需要通过函数或函数。
4.OOP技术由、、方法、消息和继承五个基本的概念所组成。
5.类的成员函数可以在定义,也可以在定义。
6.类test的构造函数是和__________同名的函数,析构函数名是。
7.类是用户定义的类型,具有类类型的变量称作______。
8.一个类的析构函数不允许有。
9.建立对象时,为节省内存,系统只给________分配内存。
10.类中的数据和成员函数默认访问类型为。
11.当建立一个新对象时,程序自动调用________。
12.成员函数在类体外定义格式是:
______________________________________。
三、改错题(共10分,每题2分)
1.下面的程序定义了一个Point类,找出程序中的错误语句并改正。
#include
classPoint{
intx;
public:
voidPoint(inta)
{x=a;}
intGetx(){returnx;}
voidShow()
{cout<};
voidmain()
{PointA(76);
cout<}
2.根据静态成员的特点,指出下列程序的错误。
#include
#include
classPart
{public:
Part(char*pname=”noname”)
{strncpy(name,pname);
noofpart++;
no=noofpart;
cout<<”createtheno:
”<}
~Part()
{noofpart--;
cout<<”destroytheno:
”<}
staticintnumber(){returnno;}
protected:
staticintnoofpart=0;
intno;
charname[40];
};
voidmain()
{Partp1;
Partp2;
}
3.以下程序的功能是:
利用友员函数为类的成员变量进行初始化,然后利用成员函数输出。
请改正程序中的错误,使之能正确运行。
#include
classA
{inta,b;
public:
friendvoidsetval(inti,intj);
voidshowA()
{cout<};
voidsetval(inti,intj)
{a=i;b=j;}
voidmain()
{Aobj1;
setval(2,3);
obj1.showA();
}
4.分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。
#include
classone
{inta1,a2;
public:
one(intx1=0,x2=0);
};
voidmain()
{onedata(2,3);
cout<cout<}
5.分析以下程序的错误原因,给出修改方案使之能正确运行。
#include
classAmplifier{
floatinvol,outvol;
public:
Amplifier(floatvin,floatvout)
{invol=vin;outvol=vout;}
floatgain();
};
Amplifier:
:
floatgain(){returnoutvol/invol;}
voidmain()
{Amplifieramp(5.0,10.0);
cout<<"\n\nThegainis=>"<}
四、看程序写结果(共16分,每题4分)
1.#include
classtest
{public:
test();
test(int);
~test();
voiddisplay();
protected:
intn;
};
test:
:
test(){cout<<”Constructingnormally\n”;}
test:
:
test(intnum)
{n=num;
cout<<”Constructingwithanumber:
”<}
voidtest:
:
display(){cout<<”Displayanumber:
”<test:
:
~test(){cout<<”Destructing”<voidmain()
{testobj1;
testobj2(59);
obj1.display();
obj2.display();
}
2.#include
classCount
{public:
Count(){count++;}
staticintgetn(){returncount;}
~Count(){count--;}
private:
staticintcount;
};
intCount:
:
count=100;
voidmain()
{Countc1,c2,c3,c4;
cout<:
getn()<}
3.#include
classmyclass
{inta,b;
public:
voidinit(inti,intj)
{a=i;b=j;}
friendintsum(myclassx);
};
intsum(myclassx)
{returnx.a+x.b;}
voidmain()
{myclassy;
y.init(15,20);
cout<}
4.#include
classpoint
{intx,y;
public:
point(inta,intb)
{x=a;y=b;
cout<<"callingtheconstructorfunction."<}
point(point&p);
friendpointmove(pointq);
~point(){cout<<"callingthedestructorfunction.\n";}
intgetx(){returnx;}
intgety(){returny;}
};
point:
:
point(point&p)
{x=p.x;y=p.y;
cout<<"callingthecopy_initializationconstructorfunction.\n";
}
pointmove(pointq)
{cout<<"OK!
\n";
inti,j;
i=q.x+10;
j=q.y+20;
pointr(i,j);
returnr;
}
voidmain()
{pointm(15,40),p(0,0);
pointn(m);
p=move(n);
cout<<"p="<
}
五、编程题(共30分,每题10分)
1.某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。
2.定义一个Car类和Truck类,用友元实现两类对象行使速度的快慢比较。
3.定义一个学生类,其中有3个数据成员:
学号、姓名、年龄,以及若干成员函数。
同时编写main函数使用这个类,实现对学生数据的赋值和输出。