標籤:

關於阿里巴巴2011年一道C++筆試題(struct和class)的疑問?

2011年阿里巴巴的筆試題:

關於struct和class,下面的說法正確的是:

A.struct的成員默認是public,class的成員默認是private;

B.struct不能繼承,class可以繼承

C.struct可以有無參構造函數

D.struct的成員變數只能是public

答案寫的是A,但是C呢?

按我平時的使用感受,以及在C++ Primer和深度探索C++對象模型裡邊都有提到,struct和class的區別就在於成員的默認訪問一個是public一個是private,繼承的時候,一個默認是public繼承,一個默認是private繼承。

所以struct也可以有構造函數,當然也就可以有無參構造函數了。其使用無參構造函數時的行為和class有無參構造函數時的行為應當一致。

所以我覺得C也是對的,因為struct 可以有 無參構造函數。

然而當我把這個疑問在一個C++的群里提出後,遭到了從管理員到初學者的一致嘲諷_(:з」∠)_

被嘲笑「你覺得阿里的人事都是xx的嗎」,「說struct和class類似只是為了讓菜b容易理解」。。。

一下子被罵懵了,感覺心好累。。。

那麼大神們,這道題究竟應該怎麼選呢?

是不是我理解有誤?

---------------------------------------------------------------

謝謝大家,看來我的理解沒錯,這道題應該選AC兩個選項,是書上給的答案錯了。

另外發現這道題無意中黑了阿里HR一把。。。咳咳,還是和諧一下吧


他們拿錯題了,

這是C#的,正確答案只有B

不過C#6開始結構好像也可以定義無參構造函數了,以前是不能定義,而且默認必然有一個。

A.struct的成員默認是public,class的成員默認是private;

B.struct不能繼承,class可以繼承

C.struct可以有無參構造函數

D.struct的成員變數只能是public

A:

結構成員可以具有 public、internal 或 private 已聲明可訪問性並默認為 private 已聲明可訪問性

——C#5規範3.5.1

B:

所有結構類型均從類 System.ValueType 隱式繼承,後者又從類 object 繼承。一個結構聲明可以指定實現的介面列表,但是不能指定基類。

——C#5規範11.3.2

C:

與類不同,結構不允許聲明無形參實例構造函數。

——C#5規範11.3.8

D:

結構成員可以具有 public、internal 或 private 已聲明可訪問性

——C#5規範3.5.1


1、其實只有BD是錯的。

2、連阿里出題的人也能被當C++高手膜拜,你這群層次有點低啊。


我畢業寫了7年c++,其中在阿里寫了5年,一直覺得筆試面試考這種」茴字有幾樣寫法」的題很low,我面試別人時也從來不問這樣的題。


題主沒錯!不一定阿里的人都是吃屎的,但出這題的人肯定是。


多謝題主讓我對阿里的C++水平有了更深層次的認識,從此我更加黑阿里了...

一幫寫Java的就搞不出好事情.


跑代碼的是編譯器,並不是人。無需理會他們,太low了。


「你覺得阿里的人事都是吃屎的嗎」

1. 題水平不高不代表人事有問題.

2. 阿里的人事當然不都是吃屎的.

「說struct和class類似只是為了讓菜b容易理解」

那請問那位"高手"幫忙說出除了訪問許可權, 繼承許可權, 和template里type parameter關鍵字可以用class不能用struct之外的其它不同之處吧.


這……只要真的下手寫過的人都知道struct可以有無參構造啊……這群里的人都是打嘴炮打的這麼開心我也是醉了……題主也是,最好親身實踐這樣學的才會快


我的理解:題目是關於struct和class,理解為兩者對比,那麼c選項就隱藏了後半句:class不可以。


要問問在這裡的「正確」是指什麼正確~~如果ALI內部自己定的rule也算的話,那至少要在paper上說明一下......

然後看了一下N3242 Section 9往後的章節,到12.1 constructors裡面舉得例子code:

1 Constructors do not have names. A special declarator syntax is used to declare or define the constructor.

The syntax uses:

— an optional decl-specifier-seq in which each decl-specifier is either a function-specifier or constexpr,

— the constructor』s class name, and

— a parameter list

in that order. In such a declaration, optional parentheses around the constructor class name are ignored.

[ Example:

struct S {

S(); // declares the constructor

};

S::S() { } // defines the constructor

—end example ]

MSDN:

struct (C++)

In C++, a structure is the same as a class except that its members are public by default.

然後隨便敲點code,驗證一下

struct ST

{

};

int main(int argc, char **argv)

{

ST *pST = new ST{};

delete pST;

return 0;

}

g++ 4.8.1

g++ test.cpp -std=c++11 -Wall

no error no warning~


總有那麼幾個自己本身實力也就那樣裝大神,然後在那邊嘲諷和自己差不多的,大喊別人是小白和菜雞,這不過是他們掩飾自己本身也不強的實力的表現而已


人家只是HR.....只是HR........只是HR ,你要一個HR多牛?連HR的面試題都過不了還想怎樣?


推薦閱讀:

C++ 一個 class 裡面全部是靜態函數,這種設計目的是什麼?
我是初學c++者,我想達到熟練使用c++的程度,我就想知道達到什麼地步才能算是熟練使用呢?
為什麼GCC5.x.x版本中的std::string不再採用寫時複製的實現,而改用了SSO的實現?
2017年6月,GCC 7.1 對於 C++17 標準的支持情況如何了?
C、C++、MATLAB、Python、Go 哪個比較適合寫演算法?

TAG:C |