2012-11-24 180 views
0

我最近在一次采访中被问到了这个问题。给定代码:派生类指针指向的函数

class A{ 
    public: 
     void f() { cout << "f in A" << endl; } 
}; 

class B : public A{ 
    public: 
     void g() { cout << "g in B" << endl; } 
}; 

int main() 
{ 
    B *p2 = new B;  
} 

指针p2指向哪个函数?

感谢

+1

我很确定它指向没有功能?只是对象B本身?可能是错的。 – Annabelle

+1

这不是一个函数指针。 – Pubby

+0

@Pubby在记忆中,p2指向什么呢?另外,问这个问题的意图是什么? – Jake

回答

2

p2不是一个函数指针。 p2只是指向由new B分配的内存,而不是一个函数。

1

Hmpf。 P2点到B类的一个实例,因此,它也可能指向

- 实施具体和accident-点函数g(如果你申请了一些奇怪的铸件),

但这毫无意义。 p2只是指向B类的一个实例,如果你喜欢,你可以调用这个实例的方法g。如果你更冒险,你甚至可以调用B的基类A的方法f的方法f。其他任何东西都只是依赖于实现,并没有任何意义。

0

p2不指向函数,而是指向class B的实例。它不仅不是一个函数指针(正如其他答案指出的那样),而且它指向的地址也不是任何函数的地址。如果class B包含非静态数据成员,则p2也将与第一个非静态数据成员的地址重合(但它不会指向它,因为它不是指向该类型对象的指针!)。但是,这对成员方法不起作用:成员函数指针不依赖于对象。

在采访中有这样一个无意义的问题很奇怪。也许面试官想表达他们对基本编程的无知。

相关问题