• C/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;       //非常easy,定义a的时候调用了一次构造函数
    	B b(a);
    }
    

    A.      ~B

    B.     ~B~A

    C.    ~B~A ~A

    D.    ~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);
    }
    


    A.     123

    B.     132

    C.    213

    D.    321

     

     


    答案: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));
     }
    



    A.    100-100

    B.    10050

    C.    200-100

    D.    20050




     

    答案: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.    赋值操作函数

     

     


    答案:A

    构造函数能够被子类调用,但不能被子类继承,其他的,BCD都能够

     

     

    15.以下有关mallocnew,说法错误的是? 

    A.    new建立的是一个对象。malloc分配的是一块内存.

    B.    new初始化对象。调用对象的构造函数。相应的delete调用相应的析构函数,malloc只分配内存,free只回收内存

    C.   newmalloc都是保留字。不须要头文件支持

    D.    newmalloc都可用于申请动态内存,new是一个操作符。malloc是是一个函数

     

     

     

    答案:C

    用过就知道。malloc须要#include<malloc.h>

     

     

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

    A.    静态成员存在于内存,非静态成员须要实例化才会分配内存

    B.    非静态成员能够直接訪问类中静态的成员

    C.    静态成员能訪问非静态的成员

    D.    非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期的概念

     

     

     

    答案: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!
    " );
    	}
    };
    int main( void )
    {
    	CChild *pChild = new CChild();
    	CParent *pParent = (CParent *) pChild;
    	pParent->Intro();
    	return(0);
    }
    




    A.      I'm a ParentI like football!

    B.     I'ma Parent I like basketball!

    C.    I'ma Child I like basketball!

    D.    I'ma 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));
    

    A.    0x2010x403 0x807060504030201 0x0

    B.    0x201 0x6050x807060504030201 0x0

    C.    0x201 0x6050x4030201 0x8070605

    D.    0x102 0x5060x102030405060708 0x0

     


     

    答案:B

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

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

     


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

    A.    int

    B.    long

    C.   char

    D.    float

     

     

    答案:D

    float存在精度问题

     

     

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

    A.     定义常量

    B.    标记为特殊的头文件

    C.    防止头文件被反复引用

    D.    凝视头文件

     

     

    答案:C

    水题,用过就知道








  • 相关阅读:
    IE10/IE9 Click Enter will trigger submission
    错误代码以及错误消息提示-如何更好地管理与维护消息资源
    Redmine2.6.1 升级与Agile插件安装
    编译安装的 mysql apache 用 service mysqld start 来启动
    编译安装php 5.5 缺少依赖包 及解决方案
    linux 下mysql的启动 、调试、排错
    linux 的 磁盘操作
    mysql 触发器的创建 修改 删除
    创建mysql存储过程,调用 及删除
    存储函数的创建 删除 修改
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5237300.html
Copyright © 2020-2023  润新知