因此,调用父类'构造函数的普通方法是在初始化列表中:
e.g。
#include <cstdio>
struct Parent {
explicit Parent(int a) {
printf("Parent -- int\n");
}
};
struct Child : public Parent {
explicit Child(int a) : Parent(1) {
printf("Child -- int\n");
}
};
int main(int argc, char **argv) {
Child c = Child(10);
};
打印Parent -- int
然后Child -- int
。
(Somewhat)忽略它是否是一个好主意,我想知道是否可以在构造函数的主体(在正在构造的对象上)显式调用父构造函数,在初始化列表之外。
答案 0 :(得分:1)
不,不是你想要的方式,所以它构造了对象的父部分。
处理这种情况的常用方法是使用“init”或“construct”方法,然后可以从子构造函数调用该方法:
struct Parent {
explicit Parent(int a) {
Construct(a);
}
protected:
void Construct(int a) { printf("Parent -- int\n"); }
Parent() {}
};
struct Child : public Parent {
explicit Child(int a) {
Parent::Construct(a);
printf("Child -- int\n");
}
};
int main(int argc, char **argv) {
Child c = Child(10);
};
答案 1 :(得分:0)
嗯,你可以但它不会做同样的事情。
例如。
explicit Child(int) {
Parent(1);
}
不会初始化对象的Parent
部分。相反,它将创建一个Parent
类型的新临时对象,然后该临时对象将立即被破坏。