Вы бы использовали то, что называется ctor-initializer
(некоторые люди называют его «списком инициализаторов», хотя стандарт C ++ фактически называет его «ctor-initializer»):
// In your Simulator.cpp file:
Simulator::Simulator(const Missile & missle) : m_Missile(missle)
/*^^^^^^^^^^^^^^^^*/
/* This part here */
{
/* No assignment needed */
}
Это эквивалентнок вызову конструктора копирования класса Missile
, который автоматически генерируется для вас компилятором, и все, что он делает, это копирует каждый элемент данных:
class Missile
{
public:
Missile(double xm0, double ym0, double Vmx0, double Vmy0);
~Missile();
// Compiler generated copy constructor
Missile(const Missile& rhs) /* copies each data member */
{
}
// Compiler generated copy assignment operator
Missile& operator=(const Missile& rhs)
{
/* copies each data member */
}
private:
Missile(); // default constructor
};
Обратите внимание, чтоКласс Simulator
также будет иметь сгенерированный компилятором конструктор копирования и оператор присваивания копии.
Без c-tor initializer
член Missile
будет по умолчанию инициализирован вместо этого,который вызвал бы конструктор по умолчанию, который вы объявили private
.
Вы всегда должны использовать c-tor initializer
s, когда вы можете , так как это гораздо более общее, чем присвоениепеременные-члены в конструкторе.
Это на самом деле довольно фундаментальная концепция в C ++, и любая хорошая книга по C ++ будет охватывать конструкторы и функции, сгенерированные компилятором.