我有三个结构,其中一个继承自另外两个结构:
typedef struct _abc
{
int A;
int B;
int C;
} ABC;
typedef struct _def
{
int D;
int E;
int F;
} DEF;
typedef struct _abcdef : ABC, DEF { } ABCDEF;
Run Code Online (Sandbox Code Playgroud)
(我希望第三个结构包含前两个的所有成员.有更好的方法吗?)
现在,我已经完全填充了ABC和的实例DEF,并且我想创建一个新ABCDEF实例:
int main()
{
ABC abc;
abc.B = 2;
abc.C = 1;
abc.A = 10;
DEF def;
def.D = 32;
def.E = 31;
def.F = 90;
// make a new ABCDEF with all the values of abc and def
}
Run Code Online (Sandbox Code Playgroud)
什么是创建的最佳方式ABCDEF?我能做到这一点,但它有点糟糕:
ABCDEF abcdef;
abcdef.A = abc.A;
abcdef.B = abc.B;
abcdef.C = abc.C;
abcdef.D = def.D;
abcdef.E = def.E;
abcdef.F = def.F;
Run Code Online (Sandbox Code Playgroud)
上面的内容与结构的成员相关联,如果添加了许多成员,则会很混乱.
这是C++.那些typedef是不需要的.你有建设者:
struct abc {
int A;
int B;
int C;
abc(int a, int b, int c) : A(a), B(b), C(c) {}
};
struct def {
int D;
int E;
int F;
def(int d, int e, int f) : D(d), E(e), F(f) {}
};
struct abcdef : abc, def {
abcdef(const abc& a, const def& d) : abc(a), def(d) {}
};
int main()
{
abc a(2,1,10);
def d(32,31,90);
abcdef ad(a,d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)