IBM笔考题

IBM笔试题

1.以下代码输出结果是

intp=1;
int q=-1;
int i=-p++-q;
printf("%d \n",i);

:结果是0i=-p++-q;相当于i=-p-q;p++;最后p=2q=-1。因为-的优先级大于++
2
。以下代码输出结果是什么?
注:原题为第三列代码,前两列为作为对照添加的代码

#include<iostream>

using namespacestd;

class CA

{         

public:

            inti;

            virtualvoidff(){i=1;}

            voidprint()  {printf("%d\n",i);}

};

class CB:publicCA

{

private:inti;

public:

            virtualvoidff(){i=2;}

            voidprint(){printf("%d\n",i);}

};

class CC:publicCB

{

private:

            inti;

public:

            virtualvoidff(){i=3;}

            voidprint(){printf("%d\n",i);}

};

int main()

{

            CB*A=newCC();

            A->ff();//调用的是cc类的ff()

            A->print();//调用的是CB类的print/()CB类中的i没有被赋值,下面两个对象输出结果原因同上

            CC*B=(CC*)newCA();

            B->ff();

            B->print();

            CC*C=(CC*)newCB();

            C->ff();

            C->print();

}

输出三个随机数。

#include<iostream>

using namespacestd;

class CA

{         

public:

            inti;

            virtualvoidff(){i=1;}

            virtualvoidprint() {printf("%d\n",i);}

};

class CB:publicCA

{

private:inti;

public:virtualvoidff(){i=2;}

            virtualvoidprint(){printf("%d\n",i);}

};

class CC:publicCB

{

private:inti;

public:

            virtualvoidff(){i=3;}

            virtualvoidprint(){printf("%d\n",i);}

};

int main()

{CB*A=newCC();//构造的是CC对象

            A->ff();//调用的是CC类中的ff()

            A->print();//调用的是CC类中的print()

            CC*B=(CC*)newCA();

            B->ff();

            B->print();

            CC*C=(CC*)newCB();

            C->ff();

            C->print();

}

输出 3 1 2

#include<iostream>

using namespacestd;

class CA

{         

public:inti;

            virtualvoidff(){i=1;}

            virtualvoidprint() {printf("%d\n",i);}

};

class CB:publicCA

{

private:  inti;

public:  virtualvoidff(){i=2;}

};

class CC:publicCB

{

private:  inti;

public:

            virtualvoidff(){i=3;}

};

int main()

{

            CB*A=newCC();

            A->ff();

            A->print();

            CC*B=(CC*)newCA();

            B->ff();

            B->print();

            CC*C=(CC*)newCB();

            C->ff();

            C->print();

}

输出:随机数 1 随机数.因为只有CA类中有print()函数,只有构造的是CA类的对象时才会输出设定的值。


3
C++c好的地方。(多选)

C++是面向对象语言,编程更加人性化。利于实现封装、继承、多态。c是面向过程语言
4
inline函数的特点 (多选)

inline函数是将要调用的函数代码替换到调用的地方,这样能减少程序执行时的来回跳转,提高程序执行的效率,但是会增加目标程序代码量,即增加了空间开销。
5
inline宏的不同(多选)

内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编

译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数

像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函

数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。

具体参考http://blog.csdn.net/lw370481/article/details/7311668
6
。什么叫做抽象

抽象 抽象是哲学的根本特点, 抽象不能脱离具体而独自存在。

我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象。抽象就是我们对某类事物共性的描述

具体来说,抽象是指:

1、将复杂物体的一个或几个特性抽出去,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制)。

2、将几个有区别的物体的共同性质或特性,形象地抽取出来或孤立地进行考虑的行动或过程。

抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。