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

Hmpf。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 に答える