-5

这是采访中提出的问题。在下面的代码片段中做什么foo a和表示什么。foo a()

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

foo a 和 foo a() 会做什么?面试官没有提到这是java还是c++。他们希望我用 C++ 和 Java 给出答案。

4

5 回答 5

13

在 C++ 中,第一行是错误(类不能包含自身的实例)。第二行声明了一个foo按值返回实例的方法。最后还有一个缺少的分号。

在 Java 中,第一行声明了一个数据成员,它是对foo. 第二行是一个错误,因为该方法必须有一个主体。

总之,这两种语言中的任何一种都不是有效的代码。:-)

于 2013-03-27T18:01:01.117 回答
1

从语法上讲,它在 Java 方面是不正确的。其他人已经解释过了。

然而,假设它是伪代码,我想基本的答案是这样的:

foo a;是一个名为atype的变量foo

foo a();是一个名为a返回类型对象的方法foo

于 2013-03-27T18:12:51.077 回答
1
foo a;

声明一个对 .的引用的字段afoo

foo a();

是 Java 中的错误。这是一个方法声明(没有主体的方法)。在 Java 中,这样的抽象方法必须用abstract关键字限定:

abstract foo a();

这声明了一个返回引用的抽象方法。每个包含抽象方法声明的类定义都必须使用关键字本身进行限定。在您的情况下,类声明应如下所示:afooabstract

abstract class foo {

来自 Java 语言规范 - §8.1.1.1

普通类可能有抽象方法,即已声明但尚未实现的方法,前提是它们是抽象类。如果非抽象的普通类包含抽象方法,则会发生编译时错误。

于 2013-03-27T18:14:28.333 回答
0

它是一个返回类型 foo 的方法,因为类不是抽象的编译器会抛出错误

于 2013-03-27T18:00:27.183 回答
0

对于 Java

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

第一行声明了对名为“a”的“foo”对象的引用。该值将为空。

第二行是一个错误。它试图声明一个名为“a”的方法,该方法返回一个“foo”,但该方法没有主体。需要将类和方法声明为抽象才能使其工作,或者必须为“a”方法提供一个主体。

于 2013-03-27T18:02:32.593 回答