如何从非直接基类继承构造函数?

时间:2019-01-06 21:56:25

标签: c++

如何从祖父(非直接基地)到Son继承一个构造函数?例如:

class Grandpa
{
public:
  Grandpa();
  ~Grandpa();
};

class Dad : public Grandpa
{
public:
  Dad();
  ~Dad();
};

class Son : public Dad
{
public:
  using Grandpa::Grandpa;
  ~Son();
};
  

错误:“只能从直接基础继承构造函数”

有一种方法使其工作吗?

2 个答案:

答案 0 :(得分:1)

无法继承非直接基类的构造函数。但是,您仍然可以使用它。如果要将值从儿子的构造函数传递给 Grandpa 的构造函数,则可以执行以下操作;

class Grandpa
{
public:
  Grandpa(string surname){
  // some codes in the constructor
  }
  ~Grandpa();
};

class Dad : public Grandpa
{
public:
  Dad(string surname) : Grandpa(surname){};
  ~Dad();
};

class Son : public Dad
{
public:
  Son(string surname) : Dad(surname){};
  ~Son();
};

我们要做的只是将 Son的构造函数的值传递给 Dad的构造函数,它只是传播给 Grandpa s的构造函数。

答案 1 :(得分:-1)

非虚拟继承的关系与成员身份一样直接而牢固:类构造函数绝对控制其成员构造函数的调用,而直接 non virtual 基的构造函数。编写类时,将在源代码中指定其成员和直接 non virtual 基础的方式。可能会使该类的基本不变式无效的更改。

直接从其他派生类中使用非虚拟基本构造函数会破坏C ++模型。