Я довольно долго искал свой вопрос, но пока не нашел удовлетворительного ответа.
Вопрос довольно прост: что я должен заключить в квадратные скобки, когда я использую неявное назначение для объекта.
Я всегда привык видеть что-то вроде этого: присваивай int, ты даешь ему int-значение
class Point2D
{
private:
int m_nX;
int m_nY;
public:
// A specific constructor
Point2D(int nX, int nY)
: m_nX(nX), m_nY(nY) // So the int m_nX gets the int-value nX
{
}
}
Но недавно я нашел учебник, в котором ПАРАМЕТРЫ были даны объекту. (http://www.learncpp.com/cpp-tutorial/102-composition/)
class PersonalComputer
{
private:
CPU m_cCPU;
Motherboard m_cMotherboard;
RAM m_cRAM;
public:
PersonalComputer::PersonalComputer(int nCPUSpeed, char *strMotherboardModel, int nRAMSize)
: m_cCPU(nCPUSpeed), m_cMotherboard(strMotherboardModel), m_cRAM(nRAMSize)
// So the m_cCPU-object is given a parameter nCPUSpeed, and not another m_cCPU-object
{
}
};
Итак, мой вопрос: как неявное назначение работает для объектов? И как я могу назначить объект с самим объектом (например, дать объект m_cCPU2 объекту m_cCPU).
Спасибо
Чтобы назначить инициализацию объекта с другим объектом в списке инициализатора, вы хотите определить конструктор копирования
class CPU
{
CPU(const CPU& other)
: someSpeedVariable(other.someSpeedVariable) // Eg.
{}
}
Тогда вы можете сделать это в других классах.
class PC
{
PC(const CPU& cpu)
:m_cpu(cpu)
{}
CPU m_cpu;
}
Я думаю, это то, что вы спрашиваете?
Это называется инициализация (не «неявное присвоение»).
Для примитивного типа это означает, что объекту дано то начальное значение
int nX(5);
Для типа класса это означает вызов конструктора класса с такими аргументами:
Motherboard m("ABCDE");