Я хочу, чтобы третья структура содержала всех членов первых двух. Есть ли лучший способ сделать это?
Возможно ли, чтобы ваша третья структура содержала экземпляры двух других? (Также может быть более логичным, если это отношение «есть» вместо «есть».)
struct ABCDEF
{
ABC abc;
DEF def;
};
Конечно, это меняет то, как вы обращаетесь к этим членам и используете их. Однако, если это возможно для вас, это открывает несколько простых способов инициализации ABCDEF.
ABC abc = { 10, 2, 1 };
DEF def = { 32, 31, 90 };
// Assign members from preexisting variables.
ABCDEF abcdef1;
abcdef1.abc = abc;
abcdef1.def = def;
// Initialize aggregate using preexisting variables.
ABCDEF abcdef2 = { abc, def };
// Initialize the entire aggregate in one statement.
ABCDEF abcdef3 = { 10, 2, 1, 32, 31, 90 };
В противном случае, если вам нужно, чтобы ABCDEF наследовал от двух других, я бы обычно рекомендовал концепцию из ответа sbi, где вы бы добавили соответствующие конструкторы. Хотя в зависимости от ваших конкретных потребностей, возможно, можно будет немного упростить его, используя агрегатную инициализацию и конструкторы сгенерированных копий.
struct ABC
{
int A;
int B;
int C;
};
struct DEF
{
int D;
int E;
int F;
};
struct ABCDEF : public ABC, public DEF
{
ABCDEF(const ABC& abc, const DEF& def) : ABC(abc), DEF(def) {}
};
int main()
{
ABC abc = { 10, 2, 1 };
DEF def = { 32, 31, 90 };
ABCDEF abcdef(abc, def);
return 0;
}