[英]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.