0
class Publicatie{
public:
    class Carte : public Publicatie{
    private:
        char* autor;
    };
    class Revista : public Publicatie{
    private:
        char* frecventa_aparitie;
        int numar;
    };
private:
    int cota;
    char* titlu;
    char* editura;
    int anul_aparitiei;
    int tiraj;
    Carte* c;
    Revista* r;
        public:
           //some methods...
}

これがコードです。クラス Publicatie 内でクラス Carte と Revista を宣言しています。プライベート メンバー Carte と Publicatie が必要です。これらのクラスで継承を使用して設計を行う方法が本当にわかりません。継承 :public Publicatie のタイトルにエラーが表示され、クラスが既に作成されているため (プライベート メンバーがまだ作成されていない場合でも)、動作すると思いました。

4

2 に答える 2

1

あなたのデザインは間違っています。クラスを定義しようとしていて、その定義でそれ自体から使用しようとしています。それは論理的なパラドックスです。
あなたのコードから私が理解できることからPublicatie、出版物 (または投稿) を表すという名前のクラスを作成しようとしており、それには と という名前の他の 2 つのバリアントがCarteありRevistaます。この場合、なぜPublicatieタイプCarteとの 2 つのプライベート メンバーが必要なのRevistaですか? この 2 つのメンバーを削除できるかもしれません。
または、共有メンバーの一部 ( titlutirajand... など) を抽象化された別のクラスに移動してから、 , を定義してPublicatie、それらすべてが同じ親クラスから継承されるようにすることもできます。 これらが機能することを願っています。CarteRevista

于 2013-03-27T23:08:56.900 に答える
0

完全型のクラスからのみ継承できます。ただし、アンビエント クラス定義内にネストされたクラス定義を持つ必要はありません。代わりに、次のようにすることができます。

struct Foo
{
    struct Bar;

    Bar * p;

    int get();
};

struct Foo::Bar : Foo
{
    int zip() { return 4; }
};

int Foo::get() { return p->zip(); }
于 2013-03-27T22:58:40.973 に答える