怪异的多态性c ++?

时间:2013-05-03 07:48:12

标签: c++ polymorphism

任何人都可以在这行代码中向我解释这个奇怪的一点吗?

ClassA :: ClassA(std :: string aName) :name(aName)

显然,这是该类的声明

class ClassA
{
public:
    std::string name;
    ClassA(std::string aName);
};

奇怪的代码行出现在它的cpp文件中

ClassA::ClassA(std::string aName) : name(aName)

这不是多态吗?但那么,它是什么?

4 个答案:

答案 0 :(得分:6)

这是一个带有初始化列表的构造函数:

 ClassA::ClassA(std::string aName) 
 : name(aName) // constructor initialization list
 {
   // ctor body. name is already initialized here
 }

这意味着数据成员name的初始化值为aName

与多态性正交。

答案 1 :(得分:3)

它是成员初始化程序。会员

std::string name;

将与aName一起启动 使用它允许跳过std :: string的默认构造函数,否则将使用它,因此这消除了一些开销。另一种选择是

ClassA::ClassA(std::string aName)
{
  // name is fist constucted with default constructor
  name = aName;  // value is assigned with operator =
}

这通常较慢,应该避免

答案 2 :(得分:0)

这只是初始化列表。指定构造函数时,可以在此列表中初始化成员变量。

答案 3 :(得分:0)

它是initialization list,这是一种在C ++中初始化成员变量的简洁明了的方法