C言語でサブクラスが親クラスのコンストラクタを呼び出すにはどうすればよいか
構造や継承の概念はなく、直接に定義はできませんが、構造体や関数ポインタで疑似的に親子関係を実現し、関数ポインタを用いてスーパークラスのコンストラクタを呼び出します。
サンプルコードを以下に示します。
#include <stdio.h>
// 定义父类结构体
typedef struct {
int x;
} Parent;
// 父类的构造函数
void parent_constructor(Parent* parent, int x) {
parent->x = x;
}
// 定义子类结构体
typedef struct {
Parent parent; // 子类中包含一个父类对象
int y;
} Child;
// 子类的构造函数
void child_constructor(Child* child, int x, int y) {
parent_constructor(&(child->parent), x); // 调用父类的构造函数
child->y = y;
}
int main() {
Child child;
child_constructor(&child, 10, 20);
printf("x: %d\n", child.parent.x);
printf("y: %d\n", child.y);
return 0;
}
このサンプルコードでは、親クラス構造体Parentと、子クラス構造体Childを定義することで、クラスとサブクラスの関係をシミュレートしています。親クラス構造体には、メンバー変数 x のみを含み、子クラス構造体は、親クラスオブジェクトの他に、メンバー変数 y を含んでいます。
親クラスのコンストラクタparent_constructorで、引数xを渡して親クラスのメンバ変数xに代入する。
子クラスのコンストラクタchild_constructorでは、まず親クラスのコンストラクタparent_constructorを呼び出し親クラスのオブジェクトを初期化した後、引数で受け取ったyを子クラスのメンバ変数yに代入しています。
最後にmain関数内で、子クラスのオブジェクトchild を作成し、子クラスのコンストラクタchild_constructor で初期化を行います。そして、親クラスのメンバー変数x と子クラスのメンバー変数y の値を出力します。