又刷了一套题
这些题都是百度、阿里巴巴、腾讯、网易、新浪等公司的面试原题,有一定的难度,不过确实相当有水平,可以通过做题来查漏补缺。
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);
}
答案: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);
}
答案: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));
}
答案: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,说法错误的是?
答案: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);
}
答案: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));
答案:B
我把int64改成_int64之后,编译器输出的结果是答案C
看了网友的解释,意思是把int64看成是普通的64位整形数,所以答案是B
19.switch(c)语句中,c不可以是什么类型()
答案:D
float存在精度问题
20.头文件中的 ifndef/define/endif 干什么用?
答案:C
水题,用过就知道
原文地址:http://blog.csdn.net/u011694809/article/details/45951429