这个初始化列表是什么意思?

时间:2013-03-13 14:47:34

标签: c++

// Use multiple inheritance. We want 
// both a string and an Object:
class MyString: public string, public Object {
public:
  ~MyString() {
    cout << "deleting string: " << *this << endl;
  }
  MyString(string s) : string(s) {}
};

对于上面的代码,我不明白string(s)是什么意思?实际上没有名为string的变量,但为什么它可以工作?

4 个答案:

答案 0 :(得分:3)

通常,在构造派生类时,将调用默认的基础构造函数(如果存在)。如果要为某个派生构造函数显式调用不同的基础构造函数,可以使用初始化列表来执行此操作。

在这种情况下,构造MyString时,string - 构造函数将string作为其唯一参数(复制构造函数),将使用s调用作为论点。

答案 1 :(得分:2)

string(s)正在使用MyString构建s的父类实例。

请注意MyString继承自string,这就是string使用的内容。

这称为“初始化列表”。

答案 2 :(得分:1)

它初始化类型为string的父子对象。实际上,它指定要为string父级调用哪个父构造函数。

答案 3 :(得分:1)

MyString来自string。您引用的语法string(s)s为唯一参数调用基类构造函数。