-3

クラスとそのクラスのオブジェクトを返す関数がありますが、NULLを返すと、正確には何が返されますか?

例:

class someclass {
    int a;
    int b;
    someclass::someclass(int a, int b) {
        this->a = a; this->b = b;
    }
};

someclass functionname() {
    return NULL;
}

someclass foo = functionname();

クラスのデフォルトコンストラクタがないので、何が返されますか?実際に使えるものですか?それともただのぎこちない?なぜこのようにチェックできないのですか?

if (foo == NULL) {
    something
}
4

3 に答える 3

0

コンパイラはこのコードを受け入れません。C++とは異なりJavaC#クラスインスタンスをポインタ(または参照)として扱いません。someclassしたがって、このリターンでは、コードを使用しての新しいインスタンスを作成しようとしますsomeclass(NULL)。適切なコンストラクターがないため、エラーが発生します。

クラスに「存在しない」値を設定する場合は、クラス内でプログラムするか(たとえば、ブールフラグとして)、次のようにポインタを使用します。

someclass* functionname() {

    if( ??? ) { 
        return new someclass(2,3);
    }
    else {
       return NULL;
    }
}

C++グラベッジコレクターがないことを覚えておいてください。そのため、new不要な場合は自分でedオブジェクトを削除する必要があります。

someclass *a;
a = functionname();
...
delete a;

これを忘れると、で最も厄介なエラーになりC++ます。

于 2012-12-09T23:36:42.597 に答える
0

C++ では、実際の null はありません (ただしnullptr、新しいバージョン以降はあります)。これは、NULL が次のように定義されていることを意味します。

#define NULL 0

数値変数の 0 と同じ性質を持つようにします。そのため、クラスを 0 に設定することはできません。

于 2012-12-09T23:23:34.870 に答える
0

この例は、実際にコンパイルする必要があるものよりも状況に応じた説明であるため、とにかく答えとは何の関係もないので、わざわざ検証しませんでした.クラスを定義する私の100行をふるいにかけることに誰かが興味を持っているとは思えません.機能。

とにかく答えは、クラスに1つの変数を取るコンストラクターがある場合(オプションまたはそれ以外)、そのコンストラクターを使用し、最初の変数に0を使用してオブジェクトを初期化することです。

于 2012-12-10T15:07:24.340 に答える