2012-07-30 54 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

相关问题