2012-07-30 5 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을 읽었으며 나는 방식 포인터와 참조 ++/CLI C에서 작동 이해 생각, 내가합니까?

상위 클래스에서 전역 변수를 생성하지 않고 인스턴스를 생성자에 전달하지 않고이를 수행하는 방법은 무엇입니까? 부모 클래스에서

코드 : 여기

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

+0

ref를 사용하여 객체 생성자를 전달할 수 있다고 생각하지 않습니다. 메서드를 사용하여 ref로 객체를 전달할 수 있습니까? – Paparazzi

+0

@svick 애플리케이션 필자는 쓰기가 꽤 많이 이루어 졌기 때문에 내가 가지고 있다고 생각한다. – user1079475

답변

0

나는 확실히 당신이 뭘 하려는지 이해하지 않지만, 일반적으로 당신은 무엇을 이해할 필요가 실제로 메소드에 전달됩니다 (참조 또는 값에 의해). 단순 유형 매개 변수가있는 메소드를 정의하고 호출 할 때 일반적으로 변수 주소/참조를 가져올 메소드를 정의하지 않는 한 일반적으로 값에 의해 전달됩니다. 복잡한 객체/클래스의 경우 객체에 대한 주소/참조는 값으로 전달되지만 참조/주소의 값이기 때문에 실제 객체를 삭제 (또는 완전히 다시 작성)하지 않는 한 중요하지 않습니다. 객체에 대한 참조 값을 사용하여 모든 객체의 구성원/속성을 재설정 할 수 있습니다.

그냥 의도를 명확히하기 위해 : 유틸리티 클래스를 만들어 다양한 다른 클래스의 "기본"값을 유지하려고합니까? 나

Class1 c1 = new Class1(); 

를 들어

그냥 확실하게 깨끗하고

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

코드에 대해 말하면 친절한 영어 수준이므로 친절하게도 오해 할 수도 있습니다. 나는 그것이 내 문제를 해결할지라도 유틸리티 클래스를 만들고 싶지 않다.percisely 내가하고 싶은 일은 객체 배열 nullpointer를 생성 한 다음이 배열 참조 (또는 포인터)를 취한 클래스의 인스턴스를 생성 한 다음 전역 변수를 생성하여이 배열을 수정할 수있게하는 메소드를 호출하는 것입니다. 호출 된 클래스 메소드. 이 클래스가 삭제되면, 배열 포인터가 여전히 null을 가리키고 추가 작업을 선택 하는지를 상속 클래스가 검사합니다. – user1079475

+0

내 모든 게시물을 읽는 중 이것이 원하는 것으로 추측합니다 : class someUtilityClass { public : someUtilityClass (anyOtherClassRef ref) { this.ref = ref; } 공공 : doWhateverYouWantWithAnyOtherClassRefPassedToConstructor() { ... } } 당신이 someUtilityClass 생성자에 대한 참조의 참조를 전달해야 할 것 같은 아무것도하기 위해 . 그리고 그것이라고 불리는 순서에 따라 달라집니다 : Class1 c1 = ...; someUtilityClass (&&c1); someUtilityClass.doWhateverYouWantWithAnyOtherClassRefPassedToConstructor(); 위에서 계속 –

+0

작동합니다 : 하지만 클래스 1 (C1) = ...; someUtilityClass (&&c1); C1 = ...; // 객체 someUtilityClass 뭔가를 수행합니다. 무엇이든지 당신이 원하는대로 외재하지 말아야합니다. 생성자(); 가 작동하지 않습니다. –

관련 문제