Как добавить новых членов в Struct - PullRequest
1 голос
/ 09 июля 2010

Это функции и объявления Struct, которые у меня есть, и я не могу их изменять.

DerivedA giveDerivedA ();
DerivedB giveDerivedB ();

struct Base{
    QString elementId;
    QString elementType;
};

struct DerivedA : Base {
    int a;
    int b;
};

struct DerivedB : Base {
    int c;
    int d;
};

Но мне нужно что-то вроде этого:

struct DerivedA : Base {
    int a;
    int b;
    void create();
    QString doc;
};

Как я могу добавить эти метод и член к структурам, которые я получил?

Моя первая идея:

struct myA: DerivedA {
    void create();
    QString doc;
};

Есть ли у вас какие-либо предложения?

Редактировать: 2-й вариант (выбранный)

struct myA{
    void create();
    QString doc;
    private:
      DerivedA derivedA;
};

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

Это похоже на проблему, возникающую у людей при расширении стандартных библиотечных классов.Если в вашем базовом классе нет виртуального деструктора, вы не можете безопасно наследовать его.В этом случае вы должны либо использовать свободные функции (желательно в любом случае), либо композицию.

В противном случае то, что у вас есть, хорошо.

1 голос
/ 09 июля 2010

Используйте композицию или наследование, в зависимости от того, какие отношения имеют классы (см., Например, пункты 32 и 38 в Effective C ++).

0 голосов
/ 09 июля 2010

Это не работает, вот как ты это делаешь.

...