C ++:对象的隐式赋值

时间:2014-10-09 22:00:33

标签: c++ object variable-assignment implicit

我一直在寻找我的问题,但我还没有找到任何令人满意的答案。 问题相当简单:当我对对象使用隐式赋值时,我应该在括号之间放置什么。

我总是习惯于看到这样的东西:分配一个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
    {
    }
}

但是最近我找到了一个教程,其中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
   {
   }
};

所以我的问题是:隐式赋值如何为对象工作?如何为Object本身分配一个Object(例如,将m_cCPU2-object赋予m_cCPU-object)。

由于

2 个答案:

答案 0 :(得分:1)

这称为初始化(不是"隐式赋值")。

对于基本类型,它意味着给予对象初始值

int nX(5);  

对于类类型,它意味着使用这些参数调用类的构造函数:

Motherboard m("ABCDE");

答案 1 :(得分:0)

要在初始化列表中为另一个对象初始化一个对象,要定义复制构造函数

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

然后你可以在其他课程中这样做。

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

我认为这就是你要问的问题?