2015-01-28 4 views
0

C++로 작성된 일부 시뮬레이션 소프트웨어를 디버깅하고 있으며 코드의 일부를 이해하는 데 문제가 있습니다.클래스의 인스턴스에 C++ 전달 매개 변수

소프트웨어는 3D 세계에서 움직이는 일부 엔티티를 시뮬레이션하며, 동작은 A에서 B로 직선으로 이동하거나 특정 점을 중심으로 나선형으로 이동하거나 사전 정의 된 경로를 따라 설정할 수 있습니다.

엔티티가 시뮬레이션에서 이동함에 따라 현재 속도, 방향 (방향), 현재 대상까지의 거리, 현재 대상에 도달하는 데 걸리는 시간 등 이동에 대한 일부 정보가 사용자에게 표시됩니다 & 해당 위치에 ETA가 있습니다.

현재 진행중인 버그는 여행의 ETA 및 '현재 구간을 완료 할 시간'이 올바르지 않습니다. v 사용자에게 알립니다.

나는 사용자에게이 정보를 표시하는 C++ 소스 파일에 다음 코드를 가로 질러 온 : 그래서 fpETA 해당 클래스의 인스턴스는 ...,

DateTimeAndZone fpETA(mCurrentTime); 
SystemTimeTypes::addRelativeTimeToSystemTime(fpETA, flightPlanETA); 

DateTimeAndZone이 클래스를 내가 이해가 안되면 DateTimeAndZonemCurrentTime이 매개 변수가 함수에 전달되는 것과 같은 것으로 보이는 클래스 인스턴스의 매개 변수로 전달할 수 있습니다.

DateTimeAndZone 클래스의 정의를 살펴보면 을 반환하는 문장의 끝에 return 문이 있습니다.

새로운 클래스를 만드는 매개 변수로 클래스를 전달하는 방법을 설명 할 수 있습니까? 이것의 함의는 무엇입니까? 새로운 클래스가 기존 클래스에 저장된 정보를 사용한다는 의미입니까? 아니면 제가 여기에 빠진 것이 있습니까?

내가 SO에이 질문에 건너 온,하지만 정말 내 질문에 ... 대답하지 않습니다 Passing a class object as an argument in C++

답변

1

DateTimeAndZone fpETA (mCurrentTime);

매개 변수가 정의 된 DateTimeAndZone의 생성자를 호출합니다. mCurrentTime이 DateTimeAndZone 객체 인 경우 기본적으로 복사 생성자가 호출되거나 DateTimeAndZone이 정의되어 있으면 복사 생성자가 호출됩니다.

0

복사 생성자이라고합니다. mCurrentTime 개체에서 데이터를 복사하여 새 DateTimeAndZone 개체를 만듭니다. 이러한 함수의 서명은 일반적으로 : 당신이 서명하는 방법에 대한 클래스 정의를 보면,이 특정 복사 생성자가 무엇을 볼 수

DateTimeAndZone (const &DateTimeAndZone); 

.

0

클래스는 다른 유형과 마찬가지로 매개 변수로 전달 될 수 있으므로 실제로 매개 변수를 사용하는 내용을 확인하려면 해당 생성자의 구현 (문서가없는 경우)을 살펴야합니다.

When do we have to use copy constructors?

The copy constructor and assignment operator : 생성자의이 유형은 복사 생성자라고 일반적으로 사용

, 복사 생성자의 사용을 설명하는 질문을 많이하고 그들과 함께 와서도 의미가있다

What is a copy constructor in C++?

What is the difference between a deep copy and a shallow copy?

0

다음 :

class DateTimeAndZone; 
DateTimeAndZone fpETA(mCurrentTime); 
//^this invokes: 
DateTimeAndZone::DateTimeAndZone(const DateTimeAndZone &arg); 

마지막 줄은 DateTimeAndZone 클래스의 복사 생성자입니다. 이 복사 생성자는 전달한 인수의 복사본을 보유 할 새 DateTimeAndZone 개체를 만듭니다 (이 경우 mCurrentTime).

복사 생성자는 컴파일러에서 자동으로 생성 할 수 있습니다 (어떤 경우에 참조하려면 this slideshare을 공부하거나 사용자 정의 할 수 있음).

+0

'mCurrentTime (이는 또한 DateTimeAndZone 임)'. 그는 그것이 'DateTimeAndZone'유형의 객체라는 사실을 분명히 밝혔습니다. – abcthomas