2010-04-06 20 views
1

在Java中,我們可以做到這一點:autoreferencing這個類在另一個用於C++

public class A{ 

    public static void main(String...str){ 
     B b = new B(); 
     b.doSomething(this); //How I do this in c++ ? the this self reference 
    } 
} 


public class B{ 
    public void doSomething(A a){ 
     //Importat stuff happen here 
    } 
} 

我怎麼可以這樣做,但在C++中,我的意思是的自我參考使用B中的方法?

+0

您確定要捕捉您的問題?'this'是C語言中的一個關鍵字,它仍然是這樣的。 – Potatoswatter 2010-04-06 05:11:53

+2

你的代碼不會編譯。你不能在靜態上下文中使用'this'。 – 2010-04-06 05:21:00

+0

是正確的我不能在靜態上下文中使用它,只是假設它不是靜態的 – atomsfat 2010-04-06 14:40:39

回答

2

首先,在靜態方法中沒有this參數。總之,假設主要()不是靜態這裏是你如何能做到這在C++

class A { 
public: 
    void f() { 
     B* b = new B(); 
     b->doSomething(this); 
    } 

    void g() { 
     // ... 
    }; 
}; 


class B { 
public: 
    void doSomething(A* a) { 
     // You can now access members of a by using the -> operator: 
     a->g(); 
    } 
}; 

在C++ this是一個指向「當前」對象。因此,如果您將doSomething()定義爲指向A(即:doSomething(A* a)),則您將能夠收到的A。 - >運算符將爲您提供對a參數成員的訪問權限,如下所示:a->g()

或者,也可以通過*this並定義doSomething()採取參照A(即:doSomething(A& a)):

class A { 
public: 
    void f() { 
     B* b = new B(); 
     b->doSomething(*this); 
    } 

    void g() { 
     // ... 
    }; 
}; 


class B { 
public: 
    void doSomething(A& a) { 
     // You can now access members of a by using the . operator: 
     a.g(); 
    } 
}; 

要訪問需要使用.(點)運算符的引用的成員:a.g()

1

this是C++中的一個關鍵字指向到當前對象。也許你想要*this這是對當前對象的引用。

我會說這是一個不合時宜的事;引用比大多數現代C++代碼中的指針更常見,如果將this定義爲引用,那麼所有內容都可以很好地工作。

但不便之處很小。

+1

@Potatocorn:不相關,但看到這個問題爲什麼'this'是一個指針而不是引用:http://stackoverflow.com/questions/ 645994 /爲什麼此結果是-A-指針和 - 不-A-參考 – Naveen 2010-04-06 05:17:33

1

C++有this關鍵字。但它是指針而不是參考。在您的情況下,您需要將B類中的doSomething的簽名更改爲doSomething(A* pA)並使用它,如b.doSomething(this);

0

Java是一個「現代」編譯器。模塊正確編譯,包括它們的交叉引用。 C++是一個「舊」編譯器,足夠聰明,可以通過源代碼一次性完成所有工作。然而,這意味着它會讓你從B引用A,甚至從B引用B,前提是你只使用指向它們的指針。實際上,當C++編譯A時,它不知道你有一個B類。好了,我們可以通過的聲明與前解決這個問題:

class B; 

這等於說給編譯器:沒關係,有一個B級別的地方。太棒了。現在你可以放入類「B * b」的參數,因爲指針只是一個指針(32位體系結構中的4個字節)。但是,由於編譯器需要知道類B的大小,因爲它甚至沒有編譯過,所以不能編譯一個類似於參數值「B b」的東西還沒完成。

有關於你的代碼的其他方面的考慮,特別是關於通過這個,(是一個指針),但這些方面目前尚無答案。