2012-07-30 58 views
0

我想將對象傳遞給另一個類以修改它,並且我希望對其進行修改,以便將它傳播到類對象實例中拍攝。這應該與此代碼:通過將對象傳遞給類構造函數來修改另一個類的對象

public class sth{ 
private: 
Object^ thisObject; 
public: sth(Object^ ob) 
{ 
    this->thisObject=ob; 
} 
void someFunct() 
{ 
    this->thisObject=gcnew Object(); 
} 
}; 

但它不起作用。在另一方面,這種代碼:

public: sth(Object^& ob) 
{ 
    ob=gcnew Object(); 
} 

工作正常,但如果我想通過不是由類構造函數調用的一些方法可以使用該手柄我要創建我想到了一個全局句柄(因爲C++/CLI句柄是引用一個指針)會以這種方式是可行的:

public class sth{ 
private: 
Object^ thisObject; 
public: sth(Object^% ob) 
{ 
    this->thisObject=ob;//this doesn't works 
    /*ob = this->thisObject;*///this neither 
} 
void someFunct() 
{ 
    this->thisObject=gcnew Object(); 
} 
}; 

我已閱讀this

,我想我明白指針和引用的方式工作在C++/CLI,是吧?

如何在父類中創建全局變量並將其實例傳遞給構造函數來實現此目的?從父類

代碼:

void method() 
{ 
    array<Object^>^ thisArr=nullptr; 
    verifyDial^ thisDial = gcnew verifyDial(thisArr); 
    thisDial->ShowDialog(); 
    if(thisArr !=nullptr) 
     //do sth 
    else 
     return; 
} 

這裏是verfiyDial類:

public ref class verifyDial{ 

public: array<Object^>^ thisArr; 
public: verifyDial(array<Object^>^ arr) 
{ 
     this->thisArr=arr; 
} 

/////////////////////// 
void someMethod()////event handler 
{ 
if(/*everything went right*/) 
{ 
this->thisArr=gcnew array<Object^>(2); 
this->thisArr[0] = true; 
this->thisArr[1] = true; 
} 
this->Close(); 
} 
+0

更容易理解只是可以肯定,你有一個很好的理由使用C++/CLI,對不對? – svick 2012-07-30 15:38:50

+0

我不認爲你可以傳遞一個對象構造函數參考。你可以使用一個方法並通過ref傳遞該對象嗎? – Paparazzi 2012-07-30 15:40:11

+0

@svick我寫的應用程序已經完成,所以我想我有。 – user1079475 2012-07-30 15:45:06

回答

0

我不太明白你正在嘗試做的,但通常你需要了解什麼實際上傳遞給方法(通過引用或值)。 當您定義(和調用)具有簡單類型參數的方法時,它通常按值傳遞(除非您專門定義了獲取變量地址/引用的方法)。對於複雜的對象/類,對象的地址/引用是通過值傳遞的,但是因爲它是引用/地址的值,所以除非想要銷燬(或重新創建)實際對象,否則它並不重要。您仍然可以使用對該對象的引用的值來重置ALL對象的成員/屬性。

只是爲了澄清你的意圖:你是否試圖創建實用工具類來保存各種其他類的「默認」值?

對我來說

Class1 c1 = new Class1(); 

是更清潔,比

Class1 c1 = ...; 
    someUtilityClass.resetClassReference(c1); 
+0

說到代碼對我來說是一種更高級的英語級別,所以請記住,我可能會誤解您。我不想創建實用工具類,但它可以解決我的問題。我想要做的事情是調用一個方法,它將創建對象數組nullpointer,然後創建一個類的實例,該類將使用此數組引用(或指針),然後通過創建全局變量使該數組能夠被此修改調用的類方法。一旦這個類被處置,parrent類將檢查數組指針是否仍然指向null,並選擇進一步的操作 – user1079475 2012-07-30 15:52:39

+0

通讀您所有的帖子我猜這是你想要的: class someUtilityClass { public:someUtilityClass(anyOtherClassRef ref){ this.ref = ref; } 市民:doWhateverYouWantWithAnyOtherClassRefPassedToConstructor(){ ... }} 爲了不喜歡,你將需要通過參考someUtilityClass構造函數的引用任何東西。甚至比它取決於它的調用順序如下: Class1 c1 = ...; someUtilityClass(&&c1); someUtilityClass.doWhateverYouWantWithAnyOtherClassRefPassedToConstructor(); 將工作 – 2012-07-30 16:11:15

+0

從上面續: 但 Class1的C1 = ...; someUtilityClass(&&c1); C1 = ...; //做一些與對象 someUtilityClass。做任何事與其他類別的參與者建立(); 將無法​​正常工作 – 2012-07-30 16:15:24

相關問題