2013-03-27 117 views
-5

這是面試中提出的問題。 foo afoo a()是什麼在下面的代碼片段中表示。構造函數和對象 - 訪問

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

foo a和foo a()會做什麼?面試官沒有提到這是Java還是C++。他們希望我在C++和Java中都給出答案。

+0

這是一個基本的java問題。嘗試閱讀Java教程(谷歌搜索「Java教程」)的答案。這也是一個竅門,因爲在這個類的上下文中,foo a();是java中的語法錯誤。 – DwB 2013-03-27 18:00:53

+3

這是無效的C++ ... – jrok 2013-03-27 18:01:16

+2

這是Java還是C++? – 2013-03-27 18:01:33

回答

0

其將返回類型FOO,因爲類不是抽象編譯器將拋出錯誤

+0

質量差的答案,在其他答案中措辭更好,只解決部分問題。我建議刪除。 – JBentley 2013-03-27 18:15:59

13

在C++中的方法中,第一行是一個錯誤(一類不能包含自己的一個實例)。第二行聲明一個按值返回foo實例的方法。最後還有一個缺失的分號。

在Java中,第一行聲明瞭一個對foo的引用的數據成員。第二行是錯誤,因爲該方法必須有一個主體。

總之,這兩種語言都不是有效的代碼。 :-)

+3

你被Java的一半觀衆貶低了:D – jrok 2013-03-27 18:01:55

+0

@jrok:是的,它花了一點時間來發現混淆標籤:) – NPE 2013-03-27 18:02:16

+4

C++在類定義之後還需要分號。 – Praetorian 2013-03-27 18:04:43

0

對於Java

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

第一行聲明以 「a」 的名稱的參照 「foo」 的對象。該值將爲空。

第二行是錯誤。它試圖聲明一個名爲「a」的方法,該方法返回一個「foo」,但該方法沒有實體。這個類和方法需要被聲明爲抽象的才能工作,或者「a」方法必須被賦予一個主體。

1

在語法上,它不是Java正確的。其他人已經解釋說。

假設它是僞代碼,但是,我想基本的答案是這樣的:

foo a;是一個名爲foo類型的a變量。

foo a();是一種名爲a的方法,返回foo類型的對象。

1
foo a; 

聲明一個字段a這是foo參考。

foo a(); 

是Java中的錯誤。這是一個方法聲明(方法沒有主體)。在Java這樣的抽象方法必須與abstract關鍵字限定:

abstract foo a(); 

這聲明一個抽象方法a返回foo參考。包含抽象方法聲明的每個類定義必須使用abstract關鍵字本身進行限定。在你的情況下,類聲明應該是這樣的:

abstract class foo { 

從Java語言規範 - §8.1.1.1

普通類可以有抽象方法,也就是已宣告但尚未實施 方法,只有它們是抽象類 。如果一個非抽象的普通類包含一個抽象方法 ,則會發生編譯時錯誤。