首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++初始化列表

C++初始化列表
EN

Stack Overflow用户
提问于 2013-06-18 13:24:52
回答 6查看 482关注 0票数 0

下面是我不完全理解的初始化列表上的代码。特别是,它是页面的最后一部分(red(Bow("red")) and blue(Bow("blue"))。

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

初始化语法为

代码语言:javascript
运行
复制
ClassName(argumentlist): datamember1(value1), dataMember2(value2){}

我不明白这个初始化是如何工作的。我理解在ArcheryCompetition类中创建Bow类的对象,这几乎就像在另一个类的构造函数的初始化列表中调用另一个类的构造函数一样。这都是我正在读的一本初学者的书。

如果需要更多的澄清,请让我知道。

代码语言:javascript
运行
复制
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)**
{
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-06-18 14:31:38

由于成员redblue都是Bow类的实例,因此调用red("red")blue("blue")就足够了。它将使用选定的参数调用类Bow的构造函数:

代码语言:javascript
运行
复制
ArcheryCompetition::ArcheryCompetition(int lrounds):
rounds(lrounds), red("red"), blue("blue"), redScore(0), blueScore(0)
{
}

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

代码语言:javascript
运行
复制
Bow(const Bow& toCopy); 

它创建Bow的临时实例,使用"red“参数调用它的构造函数,并将这个临时对象逐字节复制到为red成员保留的内存中。我知道这可能有点令人困惑,我不知道为什么这样的构造被放在书中,而没有解释什么是复制构造函数。

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

票数 3
EN

Stack Overflow用户

发布于 2013-06-18 13:27:58

例如

代码语言:javascript
运行
复制
Bow("red")

正在调用Bow构造函数。

此外,您应该将初始化器的顺序与声明的顺序相同。

票数 1
EN

Stack Overflow用户

发布于 2013-06-18 13:30:48

初始化器

代码语言:javascript
运行
复制
red(Bow("red"))

使用参数"red“调用Bow构造函数,然后用新的(匿名) Bow初始化red

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17161129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档