1

私は C++ にはまったく慣れていませんが、他の言語の一般的な知識は持っています。最近、C++ に関するいくつかのチュートリアルを見てきましたが、className();. これは他の言語にも存在する可能性がありますが、私はこれまで見たことがありません。私も以前にそれらが使用されているのを見たことがないと思うので、私の質問は次のとおりです:それらは何のためにあるのですか? そして、彼らは何ですか?これをグーグルで調べてみましたが、名前がわかりません..「コンストラクターのないクラス」はあまり役に立ちませんでした。

コンストラクターがなくても、インスタンス化できますか? それとも静的なものですか?整数を含み、コンストラクターを持たないクラスがある場合、そのint i = myClass.int;ようなことはできますか? コンストラクターのないクラスにどのようにアクセスしますか?

4

3 に答える 3

4

コンストラクターを明示的に宣言しない場合、コンパイラは引数なしのコンストラクターを提供します。*

したがって、このコード:

class Foo {
};

次のコードと同じです。

class Foo {
public:
    Foo() {};
};


* これが機能しない場合を除きます。たとえば、クラスに初期化が必要な参照または const メンバーが含まれているか、デフォルトのコンストラクターを持たないスーパークラスから派生しています。

于 2013-02-23T01:10:41.173 に答える
0

コンストラクターのないクラスは、インターフェイスを実装するための優れたモデルです。

多くのインターフェイスはメソッドで構成され、データ メンバーがないため、構築するものは何もありません。

class Field_Interface
{
  public:
    // Every field has a name.
    virtual const std::string&  get_field_name(void) const = 0;

    //  Every field must be able to return its value as a string
    virtual std::string         get_value_as_string(void) const = 0;
};

上記のクラスは、抽象クラスとして知られています。機能を持つことを意図したものではなく、インターフェースを定義することを意図しています。

于 2013-02-23T01:27:56.667 に答える
0

コンストラクターを明示的に指定しない場合、コンパイラーはデフォルトのコンストラクター (引数なしのコンストラクターとコピー コンストラクター) を生成します。したがって、コンストラクターのないクラスなどはありません。クラスのインスタンスがいつどのように作成されたかを制御するためにコンストラクターにアクセスできないようにすることはできますが、それは別の話です。

于 2013-02-23T01:12:33.140 に答える