下面是我不完全理解的初始化列表上的代码。特别是,它是页面的最后一部分(red(Bow("red")) and blue(Bow("blue")
)。
Bow(string aColor)
是包含在.h
文件中的另一个类,其构造函数的形式为Bow。
初始化语法为
ClassName(argumentlist): datamember1(value1), dataMember2(value2){}
我不明白这个初始化是如何工作的。我理解在ArcheryCompetition
类中创建Bow
类的对象,这几乎就像在另一个类的构造函数的初始化列表中调用另一个类的构造函数一样。这都是我正在读的一本初学者的书。
如果需要更多的澄清,请让我知道。
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)**
{
}
发布于 2013-06-18 14:31:38
由于成员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/
发布于 2013-06-18 13:27:58
例如
Bow("red")
正在调用Bow
构造函数。
此外,您应该将初始化器的顺序与声明的顺序相同。
发布于 2013-06-18 13:30:48
初始化器
red(Bow("red"))
使用参数"red“调用Bow
构造函数,然后用新的(匿名) Bow
初始化red
。
https://stackoverflow.com/questions/17161129
复制相似问题