您的位置:首页 > 其它

语言相关

2016-01-01 17:55 295 查看

JAVA:

1.问题:

public boolean returnTest() {
try {
return true;
} catch (Exception e) {
} finally {
return false;
}
}

以下代码返回值是什么?
true
false

解答:

参考这里 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.2.5

我的理解:

1、首先执行到try里的return,但是有finally语句还要执行,于是先执行return后面的语句,例如(x++),把要返回的值保存到局部变量。
2、执行finally语句的内容,其中有return语句,这时就会忽略try中的return,直接返回。
测试代码:

public static int returnTestInt()

{ int a = 0;

try { return a++; }

catch (Exception e) {

} finally { return ++a; }

}

上面的代码,在我的机器上返回结果是2.
于是本题就很简单了,选择false。

C++:

1.问题:

已知const char * node="ABC";下列语句合法的是___.
node[2] = 'k';
*node[2]='k';
*node = "xyz";
node="xyz";

解答:

答案:D
const char * node="ABC"
这是一个指向字符常量的指针,也就是 *node 的值不能被改变
A, node[2] = 'k';更改coust类型的值,编译不通过
B,*node[2]这种写法本身就是错误的
C,*node = "xyz"; 前面说了,*node的值不能改变
D,node是指针类型,node指向的内容不能改变,但是node指针本身可以改变
node="xyz";这里是让node指向“xyz”的首地址

2.问题:

虚函数,指针指向子类地址就调用子类地址,指向父类地址就调用父类函数:
引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。

class Cman

{

public:

virtual void Eat(){……};

void Move();

private:

};

class CChild : public CMan

{

public:

virtual void Eat(){……};

private:

};

CMan m_man;

CChild m_child;

//这才是使用的精髓,如果不定义基类的指针去使用,没有太大的意义

CMan *p ;

p = &m_man ;

p->Eat(); //始终调用CMan的Eat成员函数,不会调用 CChild 的

p = &m_child;

p->Eat(); //如果子类实现(覆盖)了该方法,则始终调用CChild的Eat函数

//不会调用CMan 的 Eat 方法;如果子类没有实现该函数,则调用CMan的Eat函数

p->Move(); //子类中没有该成员函数,所以调用的是基类中的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: