親コンストラクターが呼び出される前に何らかの処理を行いたい。次の例は、わかりやすくするために少し単純にしてあるにもかかわらず、なぜこれを行う必要があるかを示しています。実際の親コンストラクターはレンダリングを行っていますが、最初にこの問題を解決してみましょう。
基本的に、オーバーライドされた関数が親コンストラクターによって呼び出されたときに問題が発生しますが、子のデータはまだ設定されていません。これを修正するにはどうすればよいですか?
class BaseClass {
public:
int myNumber;
BaseClass(){
myNumber = 0;
this->printNumber();
}
virtual void printNumber(){
printf("My number is %d\n", this->myNumber);
}
}
class ChildClass : BaseClass {
public:
float childNumber;
ChildClass(float myNumber) : BaseClass() {
this->childNumber = myNumber;
}
void printNumber(){
printf("My number is %f\n", this->childNumber);
}
}