语言相关

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(); //子类中没有该成员函数,所以调用的是基类中的
posted @ 2016-01-01 17:55  jasonkent27  阅读(216)  评论(0编辑  收藏  举报