-5

これは面接で聞かれる質問です。以下のコーディング スニペットで何foo aを意味し、何を示しているか。foo a()

class foo
    {
        foo a;
        foo a();
    }

foo a と foo a() は何をしますか? インタビュアーは、これが Java なのか C++ なのかについて言及しませんでした。彼らは私に C++ と Java の両方で答えてほしいと思っていました。

4

5 に答える 5

13

C++ では、最初の行はエラーです (クラスにそれ自体のインスタンスを含めることはできません)。2 行目では、値によってのインスタンスを返すメソッドを宣言していfooます。また、最後にセミコロンがありません。

Java では、最初の行で への参照であるデータ メンバーを宣言しますfoo。メソッドには本体が必要なため、2 行目はエラーです。

要約すると、これは 2 つの言語のどちらでも有効なコードではありません。:-)

于 2013-03-27T18:01:01.117 に答える
1

構文的には、Java に関しては正しくありません。他の人はそれを説明しました。

ただし、それが疑似コードであると仮定すると、基本的な答えは次のようになると思います。

foo a;aタイプ の名前付き変数ですfoo

foo a();a型のオブジェクトを返すという名前のメソッドfooです。

于 2013-03-27T18:12:51.077 に答える
1
foo a;

への参照であるフィールド を宣言します。afoo

foo a();

Javaのエラーです。これはメソッド宣言 (本体のないメソッド) です。abstractJava では、このような抽象メソッドは次のキーワードで修飾する必要があります。

abstract foo a();

これは、参照を返す抽象メソッドを宣言します。抽象メソッド宣言を含むすべてのクラス定義は、キーワード自体で修飾する必要があります。あなたの場合、クラス宣言は次のようになります。afooabstract

abstract class foo {

Java言語仕様から - §8.1.1.1 :

通常のクラスは、抽象メソッド、つまり、宣言されているがまだ実装されていないメソッドを持つことができますが、それらが抽象クラスである場合に限られます。抽象ではない通常のクラスに抽象メソッドが含まれている場合、コンパイル時エラーが発生します。

于 2013-03-27T18:14:28.333 に答える
0

Java の場合

class foo
    {
        foo a;
        foo a();
    }

最初の行は、「a」という名前の「foo」オブジェクトへの参照を宣言しています。値はヌルになります。

2行目はエラーです。「foo」を返す「a」というメソッドを宣言しようとしていますが、メソッドの本体がありません。これが機能するには、クラスとメソッドをabstractとして宣言するか、「a」メソッドに本体を指定する必要があります。

于 2013-03-27T18:02:32.593 に答える
0

クラスは抽象コンパイラではないため、型fooを返すメソッドはエラーをスローします

于 2013-03-27T18:00:27.183 に答える