构造函数和对象 - 访谈

时间:2013-03-27 17:59:08

标签: java c++

这是面试中提出的问题。 foo afoo a()在以下编码代码段中表示什么。

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

foo a和foo a()会做什么?采访者没有提到这是java还是c ++。他们希望我用C ++和Java提供答案。

5 个答案:

答案 0 :(得分:13)

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

在Java中,第一行声明了一个引用foo的数据成员。第二行是错误,因为该方法必须有一个正文。

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

答案 1 :(得分:1)

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

假设它是伪代码,我想,基本答案可能是:

foo a;a类型foo的变量。

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

答案 2 :(得分:1)

foo a;

声明字段 a,它是对foo的引用。

foo a();

是Java中的错误。这是方法声明(没有正文的方法)。在Java中,这种抽象方法必须使用abstract关键字限定:

abstract foo a();

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

abstract class foo {

来自Java语言规范 - §8.1.1.1

  

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

For Java

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

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

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