【发布时间】:2014-12-04 23:39:40
【问题描述】:
我一直在寻找我的问题很长一段时间,但我还没有找到任何令人满意的答案。 这个问题相当简单:当我对对象使用隐式赋值时,我应该在括号之间放什么。
我总是习惯于看到这样的事情:分配一个 int,你给它一个 int-value
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
{
}
}
但最近我发现了一个教程,其中 PARAMETERS 被赋予了一个对象。 (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-object 分配给 m_cCPU-object)。
谢谢
【问题讨论】:
-
首先你必须意识到你的代码中没有赋值。搜索“转换构造函数”。
-
我不确定您所说的“隐式分配”是什么意思,但我感觉您希望了解 复制构造 的工作原理。简而言之,有一个特殊的复制构造函数可以将一个对象的值复制到它自己的值——当你不提供自己的值时,编译器会生成一个默认的复制构造函数。
-
构造函数声明中这个额外的
PersonalComputer::是多余的。 -
类的实例可以将不同的类型作为其构造函数的参数。正如juanchopanza 所说,它被称为converting constructor。要初始化具有相同类型对象的对象是调用copy-constructor。
标签: c++ object variable-assignment implicit