如何从祖父(非直接基地)到Son继承一个构造函数?例如:
class Grandpa
{
public:
Grandpa();
~Grandpa();
};
class Dad : public Grandpa
{
public:
Dad();
~Dad();
};
class Son : public Dad
{
public:
using Grandpa::Grandpa;
~Son();
};
错误:“只能从直接基础继承构造函数”
有一种方法使其工作吗?
答案 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 ++模型。