我们如何从c++中的子类调用父重载构造函数



如果我们有一个父类和两个子类。子女1继承自父母,子女2继承自子女1。在child2类中,我们如何在child2中调用child1和parents重载构造函数。

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 
}
}; 

您可以在子类构造函数的成员初始值设定项列表中执行此操作。因为CCD_ 1不是CCD_ 2的直接基。你必须为你的直接基(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继承。虚拟基地是上述声明的例外。

它们总是在叶类中初始化,否则可能会对同一个基类进行多个构造函数调用。因此,如果您使基本虚拟化,您不仅可以在parent0中初始化它,而且必须这样做。

此外,你实际上会被强制在任何"孙子"类中称之为,所以你不会意外忘记它:

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;
}
};

最新更新