簡體   English   中英

指向具有指針成員的對象的指針

[英]Pointer to an object that has a pointer member

指針在C ++中合法嗎? 我遇到了這樣的問題: 指針到指針指針到指針

但是答案尚不清楚,是否合法的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()行可以寫嗎? 有沒有更好的方法來表示此表達式?

這是完全正確的。但是您使用的“ 指針指向指針 ”一詞是錯誤的。

該術語表示像**P這樣的雙指針, 一個指針持有另一個指針的地址

但您的情況是指針(類A)是類的成員,該類的指針(類B)由您在some_func創建

非法“ a”是私有的。 “ foo”也是如此。

如果更正為“公開”,那么它們就是法律依據。

從您的代碼中很難找到一種“更好”的方法。 但是您可以修改代碼以使代碼看起來更清晰:

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;
}

這是合法的,但在您的示例中,您的程序將崩潰(如果您可以編譯它,因為您的成員是私有的),因為您沒有創建B的實例

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

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

盡管您可能希望像重新做一樣重新考慮直接訪問變量,而是讓getter / setter訪問私有成員變量。

是的,但是您必須使用**P類的指針。
實際上,如果我們要訪問包含另一個指針的指針,則可以執行此操作.c ++允許這樣做,但請記住,只有在您將指針分配給pointer p

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM