這是面試中提出的問題。 foo a
和foo a()
是什麼在下面的代碼片段中表示。構造函數和對象 - 訪問
class foo
{
foo a;
foo a();
}
foo a和foo a()會做什麼?面試官沒有提到這是Java還是C++。他們希望我在C++和Java中都給出答案。
這是面試中提出的問題。 foo a
和foo a()
是什麼在下面的代碼片段中表示。構造函數和對象 - 訪問
class foo
{
foo a;
foo a();
}
foo a和foo a()會做什麼?面試官沒有提到這是Java還是C++。他們希望我在C++和Java中都給出答案。
在C++中的方法中,第一行是一個錯誤(一類不能包含自己的一個實例)。第二行聲明一個按值返回foo
實例的方法。最後還有一個缺失的分號。
在Java中,第一行聲明瞭一個對foo
的引用的數據成員。第二行是錯誤,因爲該方法必須有一個主體。
總之,這兩種語言都不是有效的代碼。 :-)
你被Java的一半觀衆貶低了:D – jrok 2013-03-27 18:01:55
@jrok:是的,它花了一點時間來發現混淆標籤:) – NPE 2013-03-27 18:02:16
C++在類定義之後還需要分號。 – Praetorian 2013-03-27 18:04:43
對於Java
class foo
{
foo a;
foo a();
}
第一行聲明以 「a」 的名稱的參照 「foo」 的對象。該值將爲空。
第二行是錯誤。它試圖聲明一個名爲「a」的方法,該方法返回一個「foo」,但該方法沒有實體。這個類和方法需要被聲明爲抽象的才能工作,或者「a」方法必須被賦予一個主體。
在語法上,它不是Java正確的。其他人已經解釋說。
假設它是僞代碼,但是,我想基本的答案是這樣的:
foo a;
是一個名爲foo
類型的a
變量。
foo a();
是一種名爲a
的方法,返回foo
類型的對象。
foo a;
聲明一個字段a
這是foo
參考。
foo a();
是Java中的錯誤。這是一個方法聲明(方法沒有主體)。在Java這樣的抽象方法必須與abstract
關鍵字限定:
abstract foo a();
這聲明一個抽象方法a
返回foo
參考。包含抽象方法聲明的每個類定義必須使用abstract
關鍵字本身進行限定。在你的情況下,類聲明應該是這樣的:
abstract class foo {
從Java語言規範 - §8.1.1.1:
普通類可以有抽象方法,也就是已宣告但尚未實施 方法,只有它們是抽象類 。如果一個非抽象的普通類包含一個抽象方法 ,則會發生編譯時錯誤。
這是一個基本的java問題。嘗試閱讀Java教程(谷歌搜索「Java教程」)的答案。這也是一個竅門,因爲在這個類的上下文中,foo a();是java中的語法錯誤。 – DwB 2013-03-27 18:00:53
這是無效的C++ ... – jrok 2013-03-27 18:01:16
這是Java還是C++? – 2013-03-27 18:01:33