如果我们有一个父类和两个子类。child1继承父类,child2继承Child1。在child2类中,我们如何在child2中调用child1和父类重载构造函数。
class parents{
int x;
public:
parents(int a)
{
x=a;
}
};
class child1 : public parents{
int y;
pulic:
child1(int b)
{
y=b;
}
};
class child2 :public child1{
int z;
public:
child2(int c)
{
z=c;
// how we call above overloaded constructor in this overloaded cnstructor
}
};
发布于 2020-04-18 04:37:21
这是在子类的构造函数的member initializer-list中完成的。因为parent
不是child2
的直接基础。你必须给你的直接基类(child
)一个构造函数给child2
,并且可能在child1
的构造函数中,你可以初始化你的基类parent
。
因此,您必须在整个层次结构中传播基类中的初始化,但可以直接在child2
的成员初始化器列表中处理“非常基本”的构造函数(parent
)。
试试这个:
class parents {
int x;
public:
parents(int a)
{
x = a;
}
};
class child1: public parents {
int y;
public:
child1(int b): parents(b)
{
y = b;
}
};
class child2: public child1{
int z;
public:
child2(int c): child1(c)
{
z = c;
}
};
或
您可以使用virutal
继承。虚拟库是上述语句的例外。
它们总是在叶子类中初始化,否则可能会为同一个基类调用多个构造函数。因此,如果您将基本设置为虚拟的,不仅可以在child2
中对其进行初始化,还必须这样做。
此外,您实际上会被强制在任何“孙子”-class中调用它,所以您不会意外地忘记它:
class parents {
int x;
public:
parents(int a)
{
x = a;
}
};
class child1: public virtual parents {
int y;
public:
child1(int b): parents(b)
{
y = b;
}
};
class child2: public virtual child1{
int z;
public:
child2(int c): child1(0), parents(1)
{
z = c;
}
};
https://stackoverflow.com/questions/61280195
复制相似问题