美文网首页
c++考题1

c++考题1

作者: 萌面大叔2 | 来源:发表于2016-11-21 06:55 被阅读0次
**一、选择题(每题
1分,共计27x1'=27分)**

1.下列关于类和对象的叙述中,错误的是
(  )
  A.一个类只能有一个对象
 
  B.对象是类的具体实例
 
  C.类是对某一类对象的抽象
 
  D.类和对象的关系是一种数据类型与变量的关系
 
 2.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(  )。
  A.只能是公有成员
 
  B.只能是保护成员
 
  C.只能是除私有成员之外的任何成员
 
  D.任何权限的成员
 
 3.类中定义的成员默认为(  )访问属性。
  A.public   B.private   C.protected   D.friend  

4.一个类的友元不是该类的成员,与该类的关系密切,所以它(  )。
 A.有this指针,有默认操作的对象
 
  B.没有this指针,可以有默认操作的对象
 
  C.有this指针,不能执行默认操作
 
  D.没有this指针,也就没有默认操作的对象
 
 5.假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。
 A.x.a   B.x.a()   C.x->GetValue()   D.x.GetValue() 

 6.对于任一个类,用户所能定义的构造函数的个数至多为(  )
。
  A.0   B.1   C.2   D.任意个
 
 7.一个类的析构函数通常被定义为该类的(  )成员。
   A.私有
 
  B.保护
 
  C.公用
 
  D.友元
 
 8.有如下类声明:class Foo{int bar;};则Foo类的成员bar是 (  )
 A.公有数据成员
 
  B.公有成员函数
 
  C.私有数据成员
 
  D.私有成员函数
 
 9.关于封装,下列说法中不正确的是(  )。
  A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
 
  B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
 
  C.通过封装,每个对象都成为相对独立的实体
 
  D.通过封装,对象的属性都是不可见的
 
 10.假定AB为一个类,则执行 “AB *s=new AB(a,5);”语句时得到的一个动态对象为(  )。  A.s   B.s->a   C.s.a   D.*s  11.对于一个类的构造函数,其函数名与类名(  )。
 A.完全相同
 
  B.基本相同
 
  C.不相同
 
  D.无关系
 
 12.在一个类的定义中,包含有(  )成员的定义。
 A.数据
 
  B.函数
 
  C.数据和函数
 
  D.数据或函数
 
 13.假定AB为一个类,则执行AB x;语句时将自动调用该类的(  )。
 A.有参构造函数
 
  B.无参构造函数
 
  C.拷贝构造函数
 
  D.赋值构造函数
 
 14.若类X是类Y的友元类,则下列哪种访问关系是正确的
A.类X的成员不能访问类Y的私有成员

B.类X的成员可以访问类Y的私有成员

C.类Y的成员可以访类X的私有成员
 
D.只有类Y的公共成员才能访问类X的私有成员
 
 15.假定AB为一个类,则执行 “AB a, b(3), *p;”语句时共调用该类构造函数的次数为(  )。
  A.2   B.3   C.4   D.5  

16.在C++中,当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的隐含的指针,称之为(  )指针。(2分)
  A.对象
 
  B.派生
 
  C.基类
 
  D.this 
 17.静态数据成员的初始化是在(  )中进行的。
   A.构造函数
 
  B.任何成员函数
 
  C.所属类
 
  D.类体外
 
 18.对于公有继承,基类中的私有成员在派生类中将(  )。
  A.能够直接使用成员名访问
 
  B.能够通过成员运算符访问
 
  C.仍然是基类的私有成员
 
  D.变为派生类的私有成员
 
 19.建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺依次为(  )的构造函数。
 A.自己所属类、对象成员所属类、基类
 
  B.对象成员所属类、基类、自己所属类
 
  C.基类、对象成员所属类、自己所属类
 
  D.基类、自己所属类、对象成员所属类
 
 20.派生类的成员函数可以直接访问基类的()成员。
  A.所有
 
  B.公有和保护
 
  C.保护和私有
 
  D.私有
 
 21.在c++中,一个虚函数是通过关键字(  )放在其基类说明的前面来加以说明的
.
  A.virtual   B.protected   C.operator   D.this 

 22.在C++中,对于基类的protected成员,当以protected方式派生一个新类时。该成员将成为派生类的(  )成员.
 A.private   B.protected   C.public   D.非法
 
 23.面向对象方法的多态性是指()。
   A.一个类可以派生出多个特殊类
 
  B.一个对象在不同的运行环境中可以有不同的变体
 
  C.针对一消息,不同的对象可以以适合自身的方式加以响应
 
  D.一个对象可以是由多个其他对象组合而成的
 
 24.抽象类是()
 A.不可以定义对象
 
  B.可以定义对象
 
  C.不可以派生新类
 
  D.不可以输出
 
 25.假定k是一个double类型的变量,则关于变量p的正确定义语句为(  )。
  A.double p=&k;   B.int *p=&k;   C.double *p=&k;   D.char *p=”Thank you!”;
  
26.若有定义:int aa[8];则以下表达式中不能代表数组元素aa[1]的地址的是(  )。
  A.&aa[0]+1   B.&aa[1]   C.&aa[0]++   D.aa+1 

 27.假定指针变量p定义为“int *p=new int;”,要释放p所指向的动态内存,应使用语句(  )。
   A.delete p;   B.delete *p;   C.delete &p;   D.delete []p; 

 ** 二.判断(每题2分,共计12x2'=24分
)******
1.域运算符(::)描述的是类和成员之间的关系。

2.静态成员函数只能访问静态成员变量。

3.构造函数和析构函数都可以重载。

4.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。

5. 抽象类不可以继承,只能派生
6. 类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。
7. 友元函数的声明不受访问区域的影响。
8. 子类可以继承父类的所有成员。
9. 使用new申请的内存,在程序执行结束时,必须使用delete释放。
10. 类A是类B的友元,则类B一定是类A的友元。
11. 静态成员变量每个对象都有一份拷贝。
12. 子类可以改造从父类继承的成员。**

三、问答题(每题3分,共计6x3'=18分)
1. 什么是“引用”?申明和使用“引用”要注意哪些问题?将“引用”作为函数参数有哪些特点?

2、C++中的继承有几种形式? 各种方式中的派生类对基类成员的访问规则有什
 
3、举一个多态的例子,并以C++的格式给于定义和实现。

4、派生类的构造函数和父类构造函数的执行顺序?

5、什么是虚基类?他的作用是什么?

6、解释:深拷贝,浅拷贝。

**四、看程序(每题1.5分,共计2x1.5'=3分)**题
1.分析以下程序的执行结果
 #include<iostream.h> 
class Sample
 {    
      int A[10][10];   
public:
      int &operator()(int,int); 
};
int &Sample::operator()(int x,int y) 
{     
      return A[x][y]; 
} 
void main() 
{ 
    Sample a;
    int i,j;
    for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    a(i,j)=i+j;
    for(i=0;i<10;i++) 
    cout<<a(i,1)<<" ";
    cout<<endl;
 } 

题2. 回答问题:①该程序执行后的输出结果是什么?为什么? 

#include 
class A 
{
public: 
    virtual void act1(); 
    void act2() 
  {
      act1(); 
  }
}; 
void A::act1() 
{
     cout”A::act1() called。” 
}
class B:public A 
{
public: 
void act1(); 
}
void B::act1() 
{
cout”B::act1() called。” 
}
void main() 
{
B b; 
b.act2(); 
}


《嵌入式C++高级编程》****机试试卷
一、已知
String类定义如下:(10分)
class String
{
public:
String(const char *str = NULL);             //通用构造函数
String(const String &another);          //拷贝构造函数
~ String();                             //析构函数
String & operater =(const String &rhs);     //赋值函数
private:
char *m_data; //用于保存字符串
};
写出类的成员函数的具体功能实现代码。

二、在Time类中设计如下重载运算符函数:时间:小时、分、秒 
实现加法、减法、前++、后++重载。**(10分)** 

三、使用文件相关的类,实现图片或mp3等文件的复制。**(8分)**
例如:./copyfile  a.mp3   b.mp3
 a.mp3是已经存在的mp3音频文件
,b.mp3是从a.mp3音频文件复制之后得到的新文件。

答案

C++考试题4_参考答案
一,选择
1. D    2. D    3. B    4. D    5. D    6. D    7. C    8. C    9. B    10. D

11. A   12. C   13. B   14. B   15. A   16. D   17. D   18. C   19. C   20. B

21. A   22. B   23. C   24. A   25. C   26. C   27. A

二,判断  2,7,9,12  T
1. F    2. T    3. F    4. F    5. F    6. F    7. T    8. F    9. T    10. F
11. F   12. T

三,问答
 1. C++中引用和指针的区别?
  引用是对象的别名, 操作引用就是操作这个对象, 必须在创建的同时有效得初始化(引用一个有效的对象, 不可为NULL), 初始化完毕就再也不可改变, 引用具有指针的效率, 又具有变量使用的方便性和直观性, 在语言层面上引用和对象的用法一样, 在二进制层面上引用一般都是通过指针来实现的, 只是编译器帮我们完成了转换。 之所以使用引用是为了用适当的工具做恰如其分的事, 体现了最小特权原则。
2、C++中的继承有几种形式? 各种方式中的派生类对基类成员的访问规则有什 
派生继承,虚拟继承,多重继承
有三种形式:
        方式              public          protected       private
        1,Public        public          protected       private
        2,Protected     protected       protected       private
        3,Private       private         private         private

3、在C++程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。   在c++的环境下使用c 的函数时,通常会出现编译器无法找到 obj 模块中的c 函数定义的问题,从而导致链接失败。这时因为在c++ 中支持函数重载,编译时会将函数名和参数列表连接起来,而c 语言不会,因此会造成链接失败的情况,此时 c 函数就需要使用extern “C “ 来进行链接指定。


4、派生类的构造函数和父类构造函数的执行顺序?
顺序如下:
1,      虚基类构造函数
2,      非虚基类构造函数
3,      组合对象构造函数
4,      本身构造函数

5、什么是虚基类?他的作用是什么?
当继承时,加上virtual关键字,就是所谓的虚拟继承,该基类就是虚基类;
作用:当继承重复时,会出现继承模糊的问题,虚拟继承会解决这个问题,即没有继承的时候继承,如果继承了则不需要再重复继承。

6、解释:深拷贝,浅拷贝。
浅拷贝:拷贝构造函数简单地制作了一个该资源的复制,而不对指针指向的堆空间拷贝一个复本堆空间,这样两个对象共享同一个堆空间,当其中一个对象析构时,另一个对象的指针则变成野指针,并且堆空间将产生两次delete的错误;

深拷贝:拷贝构造函数对指针属性所指的堆空间,也进行深度的空间复制,这样,两个对象就有独立的空间和资源,这是深拷贝。

四 阅读
1.      答案:8
思路:将x转化为2进制,看含有的1的个数。


2.      输出B::act1() called。

====== 机试
一
String::String(constchar*str)
{
if ( str == NULL ) // strlen在参数为NULL时会抛异常才会有这步判断
{
m_data =newchar[1] ;
m_data[0] ='\\0' ;
}
else
{
m_data =newchar[strlen(str) +1];
strcpy(m_data,str);
}
} 
String::String(const String &another)
{
m_data =newchar[strlen(another.m_data) +1];
strcpy(m_data,other.m_data);
}

String& String::operator=(const String &rhs)
{
if ( this==&rhs)
return*this ;
delete []m_data; //删除原来的数据,新开一块内存
m_data =newchar[strlen(rhs.m_data) +1];
strcpy(m_data,rhs.m_data);
return*this ;
}

String::~String()
{
delete []m_data ;
}
二
#include <iostream.h> //
using namespace std; 
class Vector
{ 
    int vec[10];
public:
    Vector(int v[10]);
    Vector();
    Vector(Vector&);
    Vector operator+(Vector&);
    Vector operator-(Vector&);
    friend ostream& operator<<(ostream& out, Vector&);
};
Vector::Vector(int v[10])
{
    int i;
    for(i=0;i<10;i++)vec[i]=v[i];
} 
Vector::Vector()
{  int i;  for(i=0;i<10;i++)vec[i]=0;  }
Vector::Vector(Vector& v)
{  int i;   for(i=0;i<10;i++)vec[i]=v.vec[i]; }
Vector Vector::operator+(Vector& v)
{
    Vector z;  int i;
    for(i=0;i<10;i++)z.vec[i]=vec[i]+v.vec[i];
    return z;
}
Vector Vector::operator-(Vector& v)
{
    Vector z;  int i;
    for(i=0;i<10;i++)    z.vec[i]=vec[i]-v.vec[i];
    return z;
}
ostream& operator<<(ostream& out, Vector& v)
{  for(int i=0;i<10;i++)   out<<v.vec[i]<<",";   return out; }
void main()
{
    int a[10]={-4,1,0,10,5,-9,8,13,6,2,};
    int b[10]={-11,8,10,17,-6,9,6,7,12,5};
    Vector v1(a),v2(b),v3,v4;
    v3=v1+v2;
    v4=v2-v1;
    cout<<v3<<endl;
    cout<<v4<<endl;
} 
三
#include < iostream > 
#include < fstream > 
using namespace std; 
void main() 
{ 
          char a[100]; 
          ofstream writeFile("text.txt"); 
          int i; 
          while(1) 
          { 
                    cin>>a; 
                    if(a[0] == ’$’) 
                               return; 
                    i = 0; 
                    while(a[i] != ’\\0’) 
                    { 
                               if( a[i]>=65 && a[i]<=90 ) 
                                         a[i]=a[i] + 32; 
                               i++; 
                    } 
                    writeFile<< a<<" "; 
          } 
}



相关文章

  • c++考题1

    答案

  • C++考题2

    ···一、选择题(每题1分,共计27x1'=27分)1.C++对C语言作了很多改进,下列描述中( )使得C语言发生...

  • C++面试题目总结

    C++常考题目参考本 1、指针和引用的区别 实体与别名 内存分配,指针需要引用不需要 sizeof() 对象的大小...

  • 考题1

    1,盒子的框高和宽: 盒宽=width+左右边框距+左右内边距 盒高=height+上下边框距+上下内边距 2,盒...

  • 周考题1

    一.单选题(共20小题,每题1.5分,共30分)1、下面哪一个标签不能放在head标签内?( C )A. tit...

  • C++程序设计入门(上) 崔毅东

    Introduction to C++ (Season 1) Unit 1: Overview of C++ 第1...

  • c++学习笔记——第一天

    一、c++综述 (1)书籍推荐 ①、c++ primer ②、c++ primer plus ③、c++编程思想 ...

  • 高考题1

    给2035的一章文 千秋万代,中国从5000年前便负重前行。在这轮回的岁月中,不断...

  • 思考题1

    回忆你的写作经历,你曾陷入什么写作困境之中呢?当时是怎样的心情和想法呢?快来分享一下你的故事吧~ 【我的昵称】张婷...

  • C++基础一01

    一、C++语言概述 1 历史背景 1)C++的江湖地位java、C、C++、python、C# 2)C++之父:B...

网友评论

      本文标题:c++考题1

      本文链接:https://www.haomeiwen.com/subject/nccspttx.html