【期末复习】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类的静态成员不实所有对象所共用的 
 
优选教育资源
共赢共享共进 
 景德镇一中-专业技术工作小结
宁波大红鹰-捐书倡议书
小学家长会-岗前培训心得