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 指向哪个函数?

谢谢

4

3 回答 3

2

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

于 2012-11-24T22:06:55.253 回答
1

嗯。p2 指向 B 类的一个实例。所以它也可以指向

- 特定于实现并且偶然指向函数 g (如果您应用一些奇怪的演员表),

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

于 2012-11-24T22:07:44.353 回答
0

p2不指向函数,而是指向class B. 它不仅不是函数指针(正如其他答案所指出的那样),而且它指向的地址也不是几乎任何实现中的任何函数的地址。如果class B有非静态数据成员,p2也将与第一个非静态数据成员的地址一致(但它不会指向它,因为它不是指向该类型对象的指针!)。但是,这不适用于成员方法:成员函数指针不依赖于对象。

很奇怪在面试中提出这样一个无厘头的问题。也许面试官想表明他们对基本编程的无知。

于 2012-11-24T22:22:09.587 回答