以下是我不完全了解的初始化列表上的代码。特别是页面(red(Bow("red")) and blue(Bow("blue"))中的最后一块。

Bow是.h文件中包含的另一类,其构造函数为Bow(string aColor)形式。

初始化语法是

ClassName(argumentlist): datamember1(value1), dataMember2(value2){}


我不了解此初始化的工作方式。我了解在类Bow中创建类ArcheryCompetition的对象,几乎就像在另一个构造函数的初始化列表中调用另一个类的构造函数一样。这些都是我正在阅读的初学者书籍。

如果需要更多说明,请告诉我。

class ArcheryCompetition
{
//member variables

private:
    //variables
    int rounds;
    float redScore;
    Bow red;

    float blueScore;
    Bow blue;

public:
    //constructor
    ArcheryCompetition( int lrounds);
    //destructor
    ~ArcheryCompetition();

    //methods
    int compete(void);

};

ArcheryCompetition::ArcheryCompetition(int lrounds):
rounds(lrounds), red(Bow("red")), blue(Bow("blue")), redScore(0), blueScore(0)**
{
}

最佳答案

由于成员red和blue都是Bow类的实例,因此只需调用red(“ red”)和blue(“ blue”)。它将使用选定的参数调用Bow类的构造函数:

ArcheryCompetition::ArcheryCompetition(int lrounds):
rounds(lrounds), red("red"), blue("blue"), redScore(0), blueScore(0)
{
}


red(Bow(“ red”))实际上是对类Bow的构造函数的复制的调用。

Bow(const Bow& toCopy);


它创建Bow的临时实例,使用“ red”参数调用其构造函数,并将此临时对象逐字节复制到为red成员保留的内存中。我知道这可能会造成一些混乱,而且我不知道为什么在不解释什么是复制构造函数的情况下将这样的结构放置在书中。

在这里您可以找到一些很好的解释:
http://www.cplusplus.com/articles/y8hv0pDG/

关于c++ - C++初始化列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17161129/

10-09 06:18