码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++综合测试题(四)

时间:2015-05-24 15:51:38      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:c++   面试   


又刷了一套题


这些题都是百度、阿里巴巴、腾讯、网易、新浪等公司的面试原题,有一定的难度,不过确实相当有水平,可以通过做题来查漏补缺。




11.下面代码的输出是什么?

class A  
{  
public:  
    A()  {     }  
    ~A() {    cout<<"~A"<<endl;   }  
};  
   
class B:public A  
{  
    public:  
        B(A &a):_a(a)  
        {  
             
        }  
        ~B()  
        {  
            cout<<"~B"<<endl;  
        }  
    private:  
        A _a;  
    };  
       
int main(void)  
 {  
        A a;       //很简单,定义a的时候调用了一次构造函数  
        B b(a); 
}
  • ~B
  • ~B ~A
  • ~B ~A ~A
  • ~B ~A ~A ~A


答案:D

要搞懂构造和析构的循序

构造顺序:

基类构造函数 > 子类成员变量构造函数 > 子类构造函数
析构顺序:
子类析构函数 > 子类成员变量析构函数 > 基类析构函数

 

 

12.以下程序的结果? 

void foo(int *a, int *b)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}
void main()
{
    int a = 1, b = 2, c = 3;
    foo(&a, &b);
    foo(&b, &c);
    foo(&c, &a);
    printf("%d, %d, %d", a, b, c);
}
  • 1,2,3
  • 1,3,2
  • 2,1,3
  • 3,2,1



答案:B

水题。。。

 

 

13.下列一段C++代码的输出是?

#include "stdio.h"
class Base
 {
 public:
     int Bar(char x)
     {
         return (int)(x);
     }
     virtual int Bar(int x)
     {
         return (2 * x);
     }
 };
 class Derived : public Base
 {
 public:
     int Bar(char x)
     {
         return (int)(-x);
     }
     int Bar(int x)
     {
         return (x / 2);
     }
 };
 int main(void)
 {
     Derived Obj;
     Base *pObj = &Obj;
     printf("%d,", pObj->Bar((char)(100)));
     printf("%d,", pObj->Bar(100));
 }
  • 100,-100
  • 100,50
  • 200,-100
  • 200,50



答案:B

 

printf("%d,", pObj->Bar((char)(100)));
printf("%d,", pObj->Bar(100));
第1句调用Base类的intBar(charx)函数

第2句调用Derived类的intBar(intx)函数


 

14.C++类体系中,不能被派生类继承的有?

  • 构造函数
  • 静态成员函数
  • 非静态成员函数
  • 赋值操作函数


答案:A

构造函数可以被子类调用,但不能被子类继承,其它的,B、C、D都可以

 

 

15.下面有关malloc和new,说法错误的是? 

  • new 建立的是一个对象, malloc分配的是一块内存.
  • new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc仅仅分配内存,free仅仅回收内存
  • new和malloc都是保留字,不需要头文件支持
  • new和malloc都可用于申请动态内存,new是一个操作符,malloc是是一个函数



答案:C

用过就知道,malloc需要#include<malloc.h>

 

 

16.下面有关类的静态成员和非静态成员,说法错误的是? 

  • 静态成员存在于内存,非静态成员需要实例化才会分配内存
  • 非静态成员可以直接访问类中静态的成员
  • 静态成员能访问非静态的成员
  • 非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期的概念



答案:C

关键在于分清 静态成员 和 非静态成员的区别

非静态成员必须实例化之后,才是一个实体

而静态成员和类的对象无关,它一直存在于内存中

 

 

17.下列代码的输出为:

class CParent 
{
    public: virtual void Intro()
    {
        printf( "I'm a Parent, " ); Hobby();
    }
    virtual void Hobby()
    {
        printf( "I like football!" );
    }
}; 
class CChild : public CParent { 
    public: virtual void Intro()
    {
        printf( "I'm a Child, " ); Hobby();
    }
    virtual void Hobby()
    {
       printf( "I like basketball!\n" );
    }
}; 
int main( void )
{
    CChild *pChild = new CChild(); 
    CParent *pParent = (CParent *) pChild; 
    pParent->Intro(); 
    return(0);
}

  • I‘m a Parent, I like football!
  • I‘m a Parent, I like basketball!
  • I‘m a Child, I like basketball!
  • I‘m a Child, I like football!


答案:C

类中的函数都是虚函数,所以

CParent *pParent = (CParent *) pChild; 

CParent *pParent = pChild; 
的输出结果是一样的


 

18.在32位小端的机器上,如下代码输出是什么:

char array[12] = {0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08};     
 short *pshort = (short *)array;     
 int *pint = (int *)array;     
 int64 *pint64 = (int64 *)array;     
 printf("0x%x , 0x%x , 0x%x , 0x%x", *pshort , *(pshort+2) , *pint64 , *(pint+2));

  • 0x201 , 0x403 , 0x807060504030201 , 0x0
  • 0x201 , 0x605 , 0x807060504030201 , 0x0
  • 0x201 , 0x605 , 0x4030201 , 0x8070605
  • 0x102 , 0x506 , 0x102030405060708 , 0x0


答案:B

我把int64改成_int64之后,编译器输出的结果是答案C

看了网友的解释,意思是把int64看成是普通的64位整形数,所以答案是B

 

19.switch(c)语句中,c不可以是什么类型()

  • int
  • long
  • char
  • float


答案:D

float存在精度问题

 

 

20.头文件中的 ifndef/define/endif 干什么用?

  • 定义常量
  • 标记为特殊的头文件
  • 防止头文件被重复引用
  • 注释头文件


答案:C

水题,用过就知道




C/C++综合测试题(四)

标签:c++   面试   

原文地址:http://blog.csdn.net/u011694809/article/details/45951429

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!