【问题标题】:C++: Implicit assignment for ObjectsC++:对象的隐式赋值
【发布时间】: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


【解决方案1】:

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

对于原始类型,这意味着对象被赋予了初始值

int nX(5);  

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

Motherboard m("ABCDE");

【讨论】:

    【解决方案2】:

    要使用初始化列表中的另一个对象分配一个初始化对象,您需要定义一个复制构造函数

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

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

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

    我想这就是你要问的?

    【讨论】:

    • 不,他们在问为什么 CPU 可以从 int 初始化。
    • 我在回答:“我怎样才能用一个对象本身来分配一个对象(例如,给一个 m_cCPU2 对象给 m_cCPU 对象)。” 这听起来像赋值运算符或复制构造函数对我有用。
    • 你说得对,这个问题没有多大意义。
    • 好吧,你可能不知道,但你解决了我的问题:),非常感谢。我认为它被称为隐式分配,因为他们在 CPP 网站上这样称呼它 (learncpp.com/cpp-tutorial/101-constructor-initialization-lists)
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 2013-12-07
    • 2017-02-17
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    相关资源
    最近更新 更多