C ++: неявное присваивание для объектов

Я довольно долго искал свой вопрос, но пока не нашел удовлетворительного ответа.
Вопрос довольно прост: что я должен заключить в квадратные скобки, когда я использую неявное назначение для объекта.

Я всегда привык видеть что-то вроде этого: присваивай 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).

Спасибо

-1

Решение

Чтобы назначить инициализацию объекта с другим объектом в списке инициализатора, вы хотите определить конструктор копирования

class CPU
{
CPU(const CPU& other)
: someSpeedVariable(other.someSpeedVariable) // Eg.
{}
}

Тогда вы можете сделать это в других классах.

class PC
{
PC(const CPU& cpu)
:m_cpu(cpu)
{}
CPU m_cpu;
}

Я думаю, это то, что вы спрашиваете?

0

Другие решения

Это называется инициализация (не «неявное присвоение»).

Для примитивного типа это означает, что объекту дано то начальное значение

int nX(5);

Для типа класса это означает вызов конструктора класса с такими аргументами:

Motherboard m("ABCDE");
1

По вопросам рекламы [email protected]