【期末复习】C 期末复习题及答案
澳洲留学生打工-伦敦大学世界排名
优选教育资源 共赢共享共进
1. 下列语句中错误的是( D)
A. int *p=new int(10) B. int *p=new
int[10] C. int *p=new int D. int
*p=new int[40](0)
2. 假设已经有定义char *const
name=”chen” 下面的语句中正确的是( A)
A. name[3]=’q’;
B. name=”lin”; C. name=new char[5] D.
name=new char(‘q’);
3. 下面的类型声明中正确的是(D )
A.
int &a[4] B. int &*p C.
int &&q D. int I,*p=& I
4.
在声明类时,下面的说法正确的是( C)
A.可以在类的声明中给数据成员赋值
B. 数据成员的数据类型可以是register
C.
private、public、protected可以按任意顺序出现 D.
没有用private、public、protected定义的数据成员是公有
成员
5.
构造函数是在(B )时被执行的。
A.程序编译 B. 创建对象
C. 创建类 D.程序装入内存
6.
在下面有关友元函数的描述中,正确的说法是(A )
A. 友元函数是独立于当前类的外部函数
B.一个友元函数不能同时定义为两个类的有友元函数
C.友元函数必须在类的外部定义
D.在外部定义友元函数时,必须加关键字friend
7. 使用派生类的主要作用是(A )
A.提高代码的可重用性 B.提高程序的运行效率 C.加强类的封装性
D.实现数据的隐藏
8. 关于虚函数,正确的描述是(A )
A.构造函数不能是虚函数
B.析构函数不能是虚函数 C.虚函数可以是友元函数 D.虚函数可以是静态成员函数
9.
如果在基类中将成员函数show声明为不带返回值得纯虚函数,正确的写法是(C )
l
show( )=0; l void show( ) l void show(
)=0; show( )=0 virtual;
10.
使用(“”,ios::app)语句打开文件后,则(A )
A.该文件只能用于输出
B.该文件只能用于输入 C.该文件既能用于输出,又能用于输入
D.若该文件存在,则清除该文件
的内容
二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)
1.#include
class student
{
char
name[10];
int age;
float aver;
void printStu( ){}
};
void main( )
{
student p1,p2,p3;
=16;
…
}
2.
#include
class stack
{
public:
stack(int sz);
private:
char *p;
int
size;
};
stack::stack(int sz)
{
优选教育资源 共赢共享共进
p=new
char[size=sz];
}
void main()
{
stack stt;
...
}
3.
#include
class CTest
{
public:
const int y2;
CTest(int i1,int
i2):y1(i1),y2(i2)
{
y1=10;
x=y1;
}
int readme()const;
...
private:
int x;
const int y1;
};
int
CTest::readme()const
{
int i;
i=x;
x++;
return x;
}
void main()
{
CTest c(2,8);
int i=c.y2;
i=c.y1;
}
三、写出下列程序的运行结果(前2题每题6分,第三
题8分,共20分)
1.#include
class toy
{
public:
toy(int q,int p)
{ quan=q; price=p;}
int
get_quan()
{return quan;}
int
get_price()
{return price;}
private:
int quan,price;
};
int main()
{
toy
op[2][2]={toy(10,20),toy(30,48),toy(50,68)
,toy(
70,80)};
int i;
for(i=0;i<2;i++)
{
cout<
优选教育资源
共赢共享共进
cout<
cout<<
return 0;
}
2.#include
class Stock
{
public:
void print()
{cout<<
};
class
Der1_Stock:public Stock
{
public:
void print()
{cout<<
};
class
Der2_Stock:public Stock
{
public:
void print()
{cout<<
};
void main()
{
Stock s1;
Stock *ptr;
Der1_Stock d1;
Der2_Stock d2;
ptr=&s1;
ptr->print();
ptr=&d1;
ptr->print();
ptr=&d2;
ptr->print();
}
3.#include
class A
{
public:
A(int i):xi(i){}
A(){xi=0;}
friend
A operator++(A a);
friend A operator--(A &a);
void print();
private:
int xi;
};
A operator++(A a)
{
++;
return a;
}
A operator--(A &a)
{
--;
return a;
}
void A::print()
{
cout<
优选教育资源 共赢共享共进
void main()
{
A i(7);
++i;
();
--i;
();
}
二 1.答案:=16;
有错(3分),因为age是
私有数据成员,不能直接访问(3分)
2. 答案:stack
stt; 有错,(3分)类中没有定义无参构
造函数(3分)
3.
答案:错误1:y1=10;有错(2分),y1是常成
B卷
一、选择题(每题2分,共20分,答案填写在题后的表格内)
1. 假设已经有定义
const char *const name=”chen” 下面的语句中正确的是(D )
A. name[3]=’a’; B. name=”lin”;
C. name=new char[5] D. cout<
A. name[3]=’q’; B.
name=”lin”; C. name=new char[5]
D. name=new char(‘q’);
3.
在下面有关对构造函数的描述中,正确的是(B )
A.构造函数可以带有返回值 B.
构造函数的名字与类名完全相同 C. 构造函数必须带有参数 D.
构造函数必须定义,不
能缺省
4. 在下面有关析构函数特征的描述中,正确的是(C )
A. 一个类可以定义多个析构函数 B.析构函数名与类名完全相同 C.
析构函数不能指定返回类型 D.析构函数可以有一个
或多个参数
5.
在下面有关静态成员函数的描述中,正确的是( B)
A. 在静态成员函数中可以使用this指针
B.在建立对象前,就可以为静态数据成员赋值
C.
静态成员函数在类外定义时,要用static前缀 D. 静态成员函数只能在类外定义
6. 友元的作用之一是( A)
A. 提高程序的运行效率 B.加强类的封装性
C.实现数据的隐藏性 D.增加成员函数的种类
7. 假设已经定义好了一个类st
udent,现在要定义类derived,它是从student私有派生的,定义类derived的正确写
员,不能修改(1分)
错误2:x++;有错(2分),readme函数是常成员函
数,不能修改对象的数据成员(1分)
错误3:i=c.y1;有错(1分),y1是私有变量,不能直
接存取(1分)
三
1.答案:10,20;30,48;50,6870,80
2.答案:Stock class.
Stock class.
Stock class.
3.答案:7
6
优选教育资源
共赢共享共进
法是( C)
derived::student private
B. class derived:student public
derived:private student{… }
derived::public student{… }
8.
要实现动态联编,派生类中的虚函数(D )
A.返回的类型可以与虚函数的原型不同
B.参数个数可以与虚函数的原型不同 C.参数类型可以与虚函数的原型不同 D.以上
都不对
9. 有关运算符重载正确的描述是(D )
A.C++语言允许在重载运算符时改变运算符的操作个数 B.
C++语言允许在重载运算符时改变运算符的优先级
C.
C++语言允许在重载运算符时改变运算符的结合性 D.
C++语言允许在重载运算符时改变运算符的原来的功能
10. 假设定义了函数模板:
template
T max(T x,T y)
{
return (x>y)?x:y; }
并定义了int i=6; char c=’a’;
错误的调用语句是( D)
A. max( i,i) B. max(c,c)
((int )c,i) (i,c)
二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)
1.
#include
class point
{public:
int
x,y;
private:
point( ){x=1;y=2;}};
void main( )
{point cpoint;
cpoint.x=2;}
2. #include
template
class Stack
{public:
Stack(int
sz)
{v=p=new T[size=sz];}
优选教育资源
共赢共享共进
~Stack()
{delete []v;}
void push(T x)
{*p++=x;}
T pop()
{return *--p;}
int lenth()const
{return (p-v);}
private:
T *v,*p;
int size;};
void main()
{Stack obj(5);
(10);}
3.#include
class student
{int sno;
int age;
void printStu( );
void setSno(int d);};
void printStu( )
{cout<<”nStudent “<
{sno=d;}
void setAge(int a)
{age=a;}
void main( )
{student lin;
(20**1);
(20);
tu( );}
优选教育资源 共赢共享共进
三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)
1.#include
class b1
{public:
b1(int ii)
{i=ii;}
void display()
{cout<protected:
int i;};
class b2
{public:
b2(int jj)
{j=jj;}
void display()
{ cout<
int j;};
class b3:public
b1,public b2
{public:
b3(int ii,int
jj,int kk):b1(ii),b2(jj)
{k=kk;}
void
setall(int ii,int jj,int kk)
{i=ii;j=jj;k=kk;}
void display()
{cout< cout<
int k;};
void main()
优选教育资源 共赢共享共进
{b1 o1(40);
y();
b2 o2(50);
y();
b3 o3(10,20,30);
y();
(50,60,70);
y();}
2.#include
class
Stock
{public:
virtual void print()
{cout<<
class Der1_Stock:public Stock
{public:
void print()
{cout<<
class Der2_Stock:public Stock
{public:
void print()
{cout<<
void main()
{Stock s1;
Stock
*ptr;
Der1_Stock d1;
Der2_Stock d2;
ptr=&s1;
ptr->print();
ptr=&d1;
ptr->print();
ptr=&d2;
优选教育资源
共赢共享共进
ptr->print();}
3.#include
const int size=10;
template
class
stack
{ public:
void init(){ tos=0; }
void push(Type ch); 参数取Type类型
Type pop(); 返回类型取Type类型
private:
Type stck[size];
数组的类型为类型参数Type,即可取任意类型
int tos;};
template
void
stack
{ if (tos==size){
cout<<
stck[tos]=ob; tos++; }
template
Type stack
{
if (tos==0)
{ cout<<
return
0;}
tos--;
return stck[tos];}
int main()
{ 定义字符堆栈
stack
int i;
(); ();
('a'); ('x');
('b'); ('y');
优选教育资源 共赢共享共进
('c'); ('z');
for(i=0;i<3;i++)
cout<<
for(i=0;i<3;i++) cout<<
return
0;}
二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)
1.答案:point cpoint;是错误的(3分),因为构造函数是私有成员(3分)
2. 答案:Stack obj(5);
有错(3分),因为Stack是类模板,应将模板实例化,才可定义对象(3分)
3.答案:错误1
:printStu、setSno两个成员函数不是公有成员,不允许在类外访问(4分)
错误2:成员函数在类外定义,应加上类名“student::”(2分)
错误3:setAge函数应在类中说明(2分)
三、写出下列程序的运行结果(前2题每题6分,第三题8分,共20分)
1.答案:40
50 10 20 30 50 60 70
2.答案:Stock class.
Deri1_Stock class.
Deri2_Stock
class.
3.答案:pop s1:c
pop s1:b
pop s1:a
pop s2:z
pop s2:y
pop s2:x
A 卷
一、单项选择题:(每小题2分,共20分)
1、假设已经有定义const char
*name=”chen”;下列语句中错误的是_____________
A.
name[3]=’q’ B. name=”lin” C. name=new
char[5] D. name=new char(‘q’)
2、在下列关键字中,用于说明类中公有成员的是____________
A.
public B. private C.
protected D. friend
3、下列哪项不是面向对象程序设计的主要特征_______________。
A.
封装 B. 继承 D. 多态
D. 结构
4、构造函数是在__________时被执行的。
A. 程序编译
B. 创建对象 C. 创建类 D. 程序装入内存
优选教育资源 共赢共享共进
5、在下面有关析构函数的描述中,正确的是____________
A.
一个类中可以定义多个析构函数
B. 析构函数的名字和类名完全相同
C.
析构函数不能指定返回类型
D. 析构函数可以有一个或多个参数
6、使用派生类的主要原因是_______________
A. 提高代码的可充用性
B. 提高程序的运行效率 C. 加强类的封装性 D. 实现数据的隐藏
7、下列的各函数中, ___________不是类的成员函数.
A. 构造函数
B. 析构函数 C. 友元函数 D. 拷贝构造函数
8、关于虚函数,正确的描述是_______________
A.
构造函数不能是虚函数 B. 析构函数不能是虚函数
C.
虚函数可以是友元函数 D. 虚函数可以是静态成员函数
9、友元的作用之一是____________
A.提高程序的运用效率
B.加强类的封装性
C.实现数据的隐藏性
D.增加成员函数的种类
10、在下面有关静态成员函数的描述中,正确的是________________
A.
在静态成员函数中可以使用this指针
B. 在建立对象前,就可以为静态数据成员赋值
C. 静态成员函数在类外定义时,要用static前缀
D.
静态成员函数只能在类外定义
得 分
评卷人
二、
判断题:(每题1分,共10分)
(
)1、使用关键字class定义的类中缺省的访问权限是私有(private)的。
(
)2、构造函数和析构函数都不能重载。
(
)3、说明或定义对象时,类名前不需加关键字class。
(
)4、可以在类的构造函数中对静态数据成员进行初始化。
( )5、protec
ted和private区别在于protected成员可以被派生类访问,而private成员则不能被派
生类访问。
( )6、在C++中,封装是通过类实现的。
(
)7、无论何时编译器都为类构造一个无参数的缺省的构造函数。
(
)8、无论什么方式的继承,基类的私有成员都不能被派生类访问。
优选教育资源
共赢共享共进
(
)9、在c++中,只有在类对象定义之后才能给数据成员赋初值。
(
)10、创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。
得 分
评卷人
三、填空题:(每空1分,共10分)
1、在C++中,类的成员访问权
限分别是:公有成员,私有成员和_________________。
2、拷贝构造函数使用_______________作为参数初始化创建中的对象。
3、
在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的________
______特
性。
4、在公有继承的情况下,基类数据成员在派生类中的访问权限____
______________。
5、在面向对象的程序设计中,通过________实现数据隐藏
;通过________实现代码的复用。
6、在C++中,构造派生类对象时,总是先从_________的初始化开始的。
7、在
基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果
没有___________,对此数据成员的访问将出现歧义;而________ 、
_________ 和operator= 是不能被派生类
继承的。
得 分
评卷人
四、写出程序运行结果(每题5分,共30分)
1、#include
int &f(int &i)
int i=15;
{i+=10;return i;}
void main()
void main()
{int i;
{int k=0;
i=100;
int &m=f(k);
::i=i+1;
cout<
cout<
}
#include
3、#include
class date{
public: timer(){seconds=0;}
public: void
setdate(int y,int m,int d);
timer(char *t){seconds=atoi(t);}
优选教育资源
共赢共享共进
void showdate();
timer(int t){seconds=t;}
private: int
year,month,day;};
timer(int min,int
sec){seconds=min*60+sec;}
void date::setdate((int y,int m,int d)
int gettime(){return seconds;}
{year=y;month=d;day=d;}
private: seconds;};
void date::showdate()
void main()
{cout<
te();}
class base{
5、#include
class base
cout<<”constructing base”<
public: base(int a)
class base1:virtual public base{
{
cout<<
n=a;
{b=sb;
cout<
class
subs:public base
class base2:virtual public base{
{ base bobj;
public: base2(int sa,int sc): :base(sa)
int m;
{c=sc;
public: subs(int a,int b,int
c):base(a),bobj(c)
cout<<” constructing base2”<
cout<<
m=b;
public: derived(int sa,int sb,int sc,int sd):
cout<<
}
{d=sd;
~subs(){cout<
优选教育资源 共赢共享共进
derived”<
void main(){ subs s(1,2,3); }
main(){derived obj(2,4,6,8); return 0;}
一、单项选择题:(每小题2分,共20分)
AADBC ACAAB
二、
判断题:(每题1分,共10分)
对错对错对 对错对对对
三、填空题:(每空1分,共10分)
1、受保护成员
2、同类对象的引用
3、封装
4、公有的
5、封装,继承
6、基类
7、作用域分隔符限定,构造函数,析构函数
四、写出程序运行结果(每题5分,共30分)
1、 10
20
2、 101
3、
20**.4.28
20**.10.25
4、 seconds1=0
seconds1=10
seconds1=20
seconds1=70
5、 constructing base class
n=1
constructing base class
n=3
constructing sub class
m=2
destructing
sub class
destructing base class
destructing base class
6、 constructing
base
constructing base1
constructing base2
constructing derived
优选教育资源
共赢共享共进
20**-20**学年第一学期期末考试
C++
1.下类引用定义中,正确的是(D)
A.int x,int &y=x;
x;int &y=x,x;
C.float x;int y=&z; D .int
x;int &y=x;
2.
假设已经有定义 const char *const
name=”chen” 下面的语句中正确的是(D )
A. name[3]=’a’;
B. name=”lin”; C. name=new char[5] D.
cout<
(D)
A.参数个数B.参数的类型C.函数名D.函数类型(返回值类型)
4、构造函数是在(
B )时被执行的。
A. 程序编译 B. 创建对象 C. 创建类
D. 程序装入内存
5、在下面有关析构函数的描述中,正确的是( C )
A.
一个类中可以定义多个析构函数
B. 析构函数的名字和类名完全相同
C.
析构函数不能指定返回类型
D. 析构函数可以有一个或多个参数
6.有以下类的说明,错误的地方是()
class Coord
1
{
int x=0;y=0; ○
2
Coord(); ○
3
public:
○
4
Coord(int x,int y); ○
5
~Coord( );
○
6
}; ○
1
B.○
2
C.○
4
D.○
5
A.○
指针是一个隐含于每一个类的成
员函数的特殊指针,它是用来指向正在操作成员函数的()的指
针。
A. 对象 B.函数
C.成员 D.类型
8.有关类和对象的说法不正确的是( C )
A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象 D.类与对象的关系和数据类型和变量的关系相似
9.
在下面有关友元函数的描述中,正确的说法是(A )
A.
友元函数是独立于当前类的外部函数
B.一个友元函数不能同时定义为两个类的有友元函数
C.友元函数必须在类的外部定义
D.在外部定义友元函数时,必须加关键字friend
10.派生类新增的成员函数,不能直接访问基类的( C)成员。
A.公有
B.保护 C.私有 D.所有
11.下述静态数据成员的特性中,(D)是错误的。
A说明静态数据成员时前面要加修饰符static
B静态数据成员要在类体外进行初始化
C引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D类的静态成员不实所有对象所共用的
优选教育资源
共赢共享共进
景德镇一中-专业技术工作小结
宁波大红鹰-捐书倡议书
小学家长会-岗前培训心得