簡體   English   中英

將構造函數庫和成員初始化器列表與繼承一起使用

[英]Using constructor base and member initializer list with inheritance

我有一個問題,如何對從基類的構造函數繼承的派生類的構造函數使用初始化程序列表。

這是有效的代碼:

class base {

public:
  base():x(0) {}
  base(int a):x(a) {}

private:
  int x;
};

class derived : public base {

public:
  derived():base():y(0) { y=0; } 
  derived(int a, int b):base(a) { y=b; }

private:
  int y;
};

但是,我想使用成員初始化程序列表直接初始化變量,這會導致錯誤:

class base {

public:
  base():x(0) {}
  base(int a):x(a) {}

private:
  int x;
};

class derived : public base {
public:
  //derived():base():y(0) {}  //wrong
  //derived(int a, int b):base(a):y(b) {}  //wrong
  derived():base(), y(0) {}  // corrected
  derived(int a, int b): base(a), y(b) {}  //corrected

private:
  int y;
};

從另一個構造函數繼承來使用初始化程序列表的構造函數的正確語法是什么?

謝謝 :)

正如迪特爾指出的,你可以很容易地有許多初始化在構造函數中,他們只是必須用逗號( , )而不是列( : )。

您派生的類應為:

class derived : public base {
public:
  derived():base(),y(0) {} 
  derived(int a, int b):base(a),y(b) {} 

private:
  int y;
};
derivedClass::derivedClass(argumentsSetOne, argumentsSetTwo, .....) : baseClassOne(argumentsSetOne) , baseClassTwo(argumentsSetTwo) { }

為了不被真正重要......我的意思是,你可以指定argumentsSetTwoargumentsSetOne在派生類的構造函數中的參數字段。 但同樣,它應該與原型中指定的相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM