したがって、親クラスのコンストラクターを呼び出す通常の方法は、初期化リストにあります。
例えば
#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
ます。
(ある程度)それが良い考えかどうかを無視して、初期化リストの外で、コンストラクターの本体(構築されているオブジェクト上)で親コンストラクターを明示的に呼び出すことができるかどうか疑問に思っています。
いいえ、希望どおりではないため、オブジェクトの親部分を構築します。
このような状況に対処する一般的な方法は、子コンストラクターから呼び出すことができる「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);
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加