由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - c++ vs Java virtual 实现(Y家)
相关主题
C++ Q65: recompiling (IB)问个C++重新编译的问题
问几个跟C++有关的面试题leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}
A question about C++. Thanks.C++面试问题,高人请进啊~~~
发发面经 攒人品 C++的问个C++ ctor的问题
C++ Q60 calling virtual function in constructor (JPMorgan)Qualcomm Phone Interbview面筋,赚RP
virtual destructor的地址在virtual table里面吗?新Qualcomm面经
发两个软件组的面试题Bloomberg网上测试题
一道面试的选择题刚phone完MS,好紧张。。。。
相关话题的讨论汇总
话题: java话题: virtual话题: c++话题: void
进入JobHunting版参与讨论
1 (共1页)
f********a
发帖数: 165
1
在constructor里调用virtual function:
c++
struct A
{
A()
{
x();
}
virtual void x()
{
cout<<"A"< }
};

struct B: public A
{
B()
{
x();
}
void x()
{
cout<<"B"< }
};

int main()
{
B b;
A* a = new B;
a->x();
}

A
B
A
B
B
如果是java的话: b b b b b
哪位解释下为何c++里是用的父类的而在java里用的子类的。
G***l
发帖数: 355
2
因为在C++里,constructor执行完之前,object还不算存在。x = new B()会先调用A的
contructor,这时候x还不知道自己是B,那个vtable也没有建立,所以根本就无从调用B
的方法,就算你那个方法声明是virtual的,也没法dynamic binding,只能调用A里的。
java在没有执行A constructor的时候,类似c++ vtable的那些东西都已经建立好了。
所以能调用到B的方法。
但是不管在c++还是java里,constructor里调用virtual method都是很糟糕的东西,绝
对不应该做,面试的人问这个很脑残。

【在 f********a 的大作中提到】
: 在constructor里调用virtual function:
: c++
: struct A
: {
: A()
: {
: x();
: }
: virtual void x()
: {

f********a
发帖数: 165
3
多谢。是个老毛子,边问边喝伏特加,面完喝完,最后瓶子都留在桌子上。也怪自己学
艺不精。
你的意思是说c++里面最后调用完A的constructor,A的vtable和b的vtable都没建立好,
所以只能用A自己的virtual function?
java里面也是需要建立vtable的?那有没有vpointer一说?为什么在没有执行的时候类
似vtable的东西都已经建好?

用B
的。

【在 G***l 的大作中提到】
: 因为在C++里,constructor执行完之前,object还不算存在。x = new B()会先调用A的
: contructor,这时候x还不知道自己是B,那个vtable也没有建立,所以根本就无从调用B
: 的方法,就算你那个方法声明是virtual的,也没法dynamic binding,只能调用A里的。
: java在没有执行A constructor的时候,类似c++ vtable的那些东西都已经建立好了。
: 所以能调用到B的方法。
: 但是不管在c++还是java里,constructor里调用virtual method都是很糟糕的东西,绝
: 对不应该做,面试的人问这个很脑残。

p****U
发帖数: 109
4
2L 应该是对的。 c++ 先call base class constructor 然后 再call derived class
。 java 就不懂了。
a**********t
发帖数: 631
5
Totally agree. Calling virtual function in constructor is bad coding
practice.

用B
的。

【在 G***l 的大作中提到】
: 因为在C++里,constructor执行完之前,object还不算存在。x = new B()会先调用A的
: contructor,这时候x还不知道自己是B,那个vtable也没有建立,所以根本就无从调用B
: 的方法,就算你那个方法声明是virtual的,也没法dynamic binding,只能调用A里的。
: java在没有执行A constructor的时候,类似c++ vtable的那些东西都已经建立好了。
: 所以能调用到B的方法。
: 但是不管在c++还是java里,constructor里调用virtual method都是很糟糕的东西,绝
: 对不应该做,面试的人问这个很脑残。

d**********x
发帖数: 4083
6
not just bad.. it is undefined behavior in c++...

用A的
了。
,绝

【在 a**********t 的大作中提到】
: Totally agree. Calling virtual function in constructor is bad coding
: practice.
:
: 用B
: 的。

w**z
发帖数: 8232
7
all mthods in Java are virtual.

class

【在 p****U 的大作中提到】
: 2L 应该是对的。 c++ 先call base class constructor 然后 再call derived class
: 。 java 就不懂了。

s********n
发帖数: 53
8
java 里面
class A {
A() {
x();
}
void x() {
System.out.println("A");
}
}
class B extends A {
B() {
x();
}
void x() {
System.out.println("B");
}
}
public class Test {
public static void main(String[] args) {
B b;
A a = new B();
a.x();
}
}
Output:
B
B
B
s***e
发帖数: 403
9
所以我说了很多遍
做C++的OOP一定要读Inside C++ Object Model这本书。
有基础的话1天就能读完,以我这种非CS背景的当年大三一个星期也读完了。然后所有
的继承啊多态啊对你就没有任何理解障碍了。
d**********x
发帖数: 4083
10
aglee

【在 s***e 的大作中提到】
: 所以我说了很多遍
: 做C++的OOP一定要读Inside C++ Object Model这本书。
: 有基础的话1天就能读完,以我这种非CS背景的当年大三一个星期也读完了。然后所有
: 的继承啊多态啊对你就没有任何理解障碍了。

1 (共1页)
进入JobHunting版参与讨论
相关主题
刚phone完MS,好紧张。。。。C++ Q60 calling virtual function in constructor (JPMorgan)
问几道面试中遇到的C++问题virtual destructor的地址在virtual table里面吗?
C++ online Test 一题发两个软件组的面试题
今天的电面 - developer position一道面试的选择题
C++ Q65: recompiling (IB)问个C++重新编译的问题
问几个跟C++有关的面试题leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}
A question about C++. Thanks.C++面试问题,高人请进啊~~~
发发面经 攒人品 C++的问个C++ ctor的问题
相关话题的讨论汇总
话题: java话题: virtual话题: c++话题: void