1

私はいくつかの C++ コードを理解しようとしていますが、私の C++ は少し腐っています。とりわけ、コードは次のクラス構造を備えています (簡潔CLASS1にするために表示されていません)。CLASS3

class CLASS4
  :public CLASS3
  ,public CLASS2{
  public:
    CLASS4(double VARA, double VARB, char VARC, int VARD, double VARE, std::vector<double> VARF, std::string VARG = "")
    throw(Error);
    CLASS4(const CLASS4&);
    ~CLASS4();

    double METHOD1();

  protected:
    void METHOD2();
};

CLASS4::CLASS4(double VARA, double VARB, char VARC, int VARD, double VARE, vector<double> VARF, string VARG) throw(Error)
  :CLASS1(VARC, VARD, VARE, VARF, VARG)
  ,CLASS2(VARB)
  ,CLASS3(VARA, VARC, VARD, VARE, VARF, VARG){}

CLASS4::CLASS4(const CLASS4& VARH)
  :CLASS1(VARH), CLASS2(VARH), CLASS3(VARH){}

CLASS4::~CLASS4(){}

オブジェクトの概念と継承の概念を理解しています。のコンストラクタとデストラクタが表示されCLASS4ます。私が理解していないのは、継承内のクラスのリストです:public CLASS3, public CLASS2。その目的は何ですか?さらに、私は何をするthrow(Error)ことになっているのだろうか。また、2 番目のコンストラクターの目的は何なのだろうかCLASS4(const CLASS4&);。これは C++ プログラマーにとって単純な問題であることは承知しています。

4

3 に答える 3

2
class CLASS4: public CLASS3, public CLASS2

は、CLASS4 が CLASS3とCLASS2のパブリック メソッドとプロパティを継承し、それらを独自のパブリック メソッドとほぼ同じように扱う (つまり、それらは CLASS4 のパブリック メソッドである) と言っています。を使用private CLASS3, protected CLASS2していた場合、CLASS3 のパブリック メソッドを取得し、CLASS4 内でそれらをプライベートにしました。同様に、その例では、CLASS2 のパブリック メソッドが保護されます。これは、特定の状況で役立ちます。ディスクにシリアル化して、意味のある方法で画面に描画できるクラスがあるとします。「Serialisable」と「Renderable」を継承して、両方のプロパティを取得します。

コンストラクターは「CLASS4(const CLASS4& VARH)コピーコンストラクター」として知られています。CLASS4 の例を挙げて、プロパティにすべて同じ値を持つ新しい CLASS4 を作成してください。デフォルトでは、C++ は各プロパティを順番にコピーするだけの単純なものを提供するため、通常は指定する必要はありません。何か巧妙なことをしている場合 (メモリの大きなブロックを割り当て、そのメモリへのポインタだけでなくその内容もコピーしたい場合など)、巧妙なことを行う独自のものを手動で指定する必要があります。

于 2012-12-07T13:04:16.587 に答える
2

基本指定子リストに複数のクラスをリストすると、クラスは他の複数のクラスから継承できます。これは一般に多重継承として知られています。

throw(error)関数宣言の後に配置することは、関数がスローする可能性のある例外を表現する方法です。これは、例外仕様として知られています。この場合、多くの引数を持つコンストラクターは、例外CLASS4をスローする可能性があると宣言しています。errorこれらの例外仕様は、C++11 では非推奨になりました。

この形式のコンストラクターは、コピー コンストラクターT(const T&)と呼ばれます。オブジェクトが別のオブジェクトをコピーして作成されている場合、次のような状況で呼び出されます。

T first;
T second(first);

クラスCLASS4にはコピー コンストラクターがあります。コピー コンストラクターを使用してオブジェクトを作成した後、新しいオブジェクトは古いオブジェクトのコピーになることが予想されます。

于 2012-12-07T12:51:26.987 に答える
2
class CLASS4
  :public CLASS3
  ,public CLASS2

多重継承です。多重継承の目的は、オブジェクトの機能に、CLASS4 から作成された CLASS2 および CLASS3 の機能も持たせることです(詳細説明については、このページを参照してください: http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index. jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr134.htm )

throw(Error)は、エラーが見つかったときにエラーをスローすることになっています。不自由に聞こえるかもしれませんが、例外処理に使用されます:) (明確な参照のためにこのページを読むことをお勧めします: http://msdn.microsoft.com /en-us/library/6dekhbbc(v=vs.80).aspx )

そしてCLASS4(const CLASS4&);コピーコンストラクタです。「コピー コンストラクターは、既存のオブジェクトのコピーとして新しいオブジェクトを作成するための C++ プログラミング言語の特別なコンストラクターです。」(ウィキペディアから引用。http://en.wikipedia.org/wiki/Copy_constructor )

于 2012-12-07T12:54:23.790 に答える