0

こんにちは、いくつかの純粋な抽象関数を持つ抽象クラスがあり、このクラスから派生するいくつかのクラスがあり、これらのクラスからのすべてのデータが最終的に同様になるとしましょう。宣言するのが賢明か、可能かどうか疑問に思っていましたデータを収集するための抽象クラスの保護下のベクトルなど。

class A
{
protected:
    vector <string> str;
public:
    virtual function x();
    virtual function y(); //etc etc
    virtual ~A(){;}
};

class B : public A
{
public:
    function x();
    function y();
};

class C: public A
{
    //similar to class B
} ;

純粋仮想関数が c++ でどのように機能するかを理解するのに苦労しています。Java で多くのプロジェクトを行ってきたので、ポリモーフィズムを理解しています。C ++の抽象クラスはインスタンス化できないため、そのベクトルを宣言して使用することさえ可能でしょうか?

4

4 に答える 4

1
I was wondering if it would be wise or even possible to declare a vector under protected in the abstract class to collect the data.

はい、いくつかの派生型間で共有されるデータ メンバーを持ち上げることは、正当な設計上の選択です。

What type of members can I add in a c++ abstract class?

抽象クラスには任意のタイプのメンバーを追加できます。一般に、クラスのデータ メンバーは、そのクラスのコンストラクターおよび他のメンバー関数内でのみ初期化して割り当てる必要があります。そうしないと、カプセル化が壊れ、クラスの保守と変更がより困難になります。

I am having difficulty understanding how pure virtual functions work with c++

宣言の最後に = 0 を配置して、仮想関数を純粋として指定します。純粋仮想関数の定義を提供する必要はありません。

抽象基本クラスのインスタンスを宣言することはできません。他のクラスを宣言するときに、基本クラスとしてのみ使用できます。

于 2012-12-11T10:35:59.257 に答える
1

純粋仮想メンバー関数は次のように宣言されます。

virtual <return-type> func(<parameters>) = 0;

それらは単なる仮想関数であり、他の仮想関数としても機能します。通常、実装は必要ありませんが、必要に応じて提供することもできます。

C++ では、必要なメンバーを抽象クラスに追加できます。抽象クラスは、1 つ以上の純粋仮想メンバー関数を持つ単なる通常のクラスです。

于 2012-12-11T09:06:55.253 に答える
0
  1. ここには抽象クラスはありません
  2. 任意の型のメンバーを抽象クラスに含めることができます
于 2012-12-11T09:05:11.377 に答える
0

何よりも重要なのは、理由です。

抽象クラスは、単なる「すべての関数を純粋仮想化したクラス」ではありません。これは、オブジェクト指向プログラミングにおける特定のイデオロギーを表しています。インターフェイスとして使用する場合、状態を含むことは想定されていません。

于 2012-12-11T09:08:14.433 に答える