2014-10-09 114 views
-1

我一直在寻找相当一段时间来解决我的问题,但是我还没有找到任何令人满意的答案。 这个问题相当简单:当我为对象使用隐式赋值时,我应该在括号之间放置什么。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_cCPU对象一个m_cCPU2对象)。

感谢

+0

首先,你必须认识到代码中没有分配任务。搜索“转换构造函数”。 – juanchopanza 2014-10-09 22:02:12

+1

我不确定你的意思是“隐式赋值”,但我有一种感觉,你希望了解*复制构造*的工作原理。简而言之,有一个特殊的拷贝构造函数将一个对象的值复制到它自己的值 - 编译器会在你不提供自己的值时生成一个默认的拷贝构造函数。 – Cameron 2014-10-09 22:04:00

+0

构造函数声明中的这个额外的'PersonalComputer ::'是多余的。 – Samer 2014-10-09 22:09:55

回答

0

要指定一个初始化对象与初始化列表中的其他对象,你要定义一个拷贝构造函数

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

然后你就可以在其他类做到这一点。

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

我想这就是你要求的?

+0

不,他们问怎么才能从'int'初始化一个'CPU'。 – juanchopanza 2014-10-09 22:14:48

+0

我在回答:“我怎么能指定一个对象与对象本身(例如,给一个m_cCPU2对象的m_cCPU对象)。”_这听起来像赋值运算符或复制构造函数工作给我。 – Aesthete 2014-10-09 22:16:48

+0

你说得对,这个问题没有多大意义。 – juanchopanza 2014-10-09 22:18:29

1

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

对于原始类型则意味着对象鉴于初值

int nX(5); 

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

Motherboard m("ABCDE"); 
+0

谢谢,让这个区别更清楚我。 – 2014-10-10 09:55:19