0

c++でポインタへのポインタは合法ですか? 私はこのSOの質問に出くわしました: Pointer to Pointer to Pointer

しかし、それが正当な c++ であるかどうかは明確ではありません。私が持っているとしましょう:

class A{
public:
    void foo(){
        /* ect */
    }
};

class B{
public:
    A* a;
    /* ect */
};

void Some_Func() {
    B *b;

    // besides this looking ugly, is it legal c++?
    b->a->foo();
};

線はb->a->foo()書いて大丈夫ですか?この表現をより適切に表現する方法はありますか?

4

4 に答える 4

2

これは完全に有効です。しかし、「ポインタからポインタへ」を使用している用語は間違っています。

この用語は、別のポインタのアドレスを保持する**Pポインタのようなダブルポインタを意味します。

しかし、あなたの場合は、(クラスAの)ポインタが、(クラスBの)ポインタがあなたによって作成されたクラスのメンバーであるということです。some_func

于 2012-10-18T05:57:06.797 に答える
0

違法。"a" は非公開です。「フ」も同様です。

「パブリック」に修正された場合、それらは合法的な構造です。

あなたのコードから、「より良い」方法を見つけるのは難しいです。しかし、コードを変更して、コードをより明確に見せることができます。

class A{
public:
    void foo(){ cout << "Work";}
};

class B{
private:
    A *a;
public:
    A& getA(){
       return *a;
    }
};

void SomeFunction()
{
    B *b = new B();
    B& bRef = *b;
    bRef.getA().foo(); //better looking code? 
        delete b;
}
于 2012-10-18T05:54:26.847 に答える
0

それは合法ですが、あなたの例では、Bのインスタンスを作成しなかったため、プログラムがクラッシュします(メンバーがプライベートであるためコンパイルできた場合)。

void Some_Func() {
    B *b;  // uninitialized B ptr  should be   B* b = new B;

    // legal
    b->a->foo();
};

ただし、変数に直接アクセスすることを再検討し、代わりに getter/setter を使用してプライベート メンバー変数にアクセスすることをお勧めします。

于 2012-10-18T06:09:04.627 に答える
-1

はい、しかし、のようなポインタへのポインタを使用する必要があります**P
実際、別のポインターを保持しているポインターにアクセスしたい場合は、これを行うことができます.これはC ++で許可されていますが、ポインターを割り当てた場合にのみpointer p

于 2012-10-18T05:53:51.620 に答える