關於阿里巴巴2011年一道C++筆試題(struct和class)的疑問?
02-23
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.1B:所有結構類型均從類 System.ValueType 隱式繼承,後者又從類 object 繼承。一個結構聲明可以指定實現的介面列表,但是不能指定基類。
——C#5規範11.3.2
C:與類不同,結構不允許聲明無形參實例構造函數。
——C#5規範11.3.8D:結構成員可以具有 public、internal 或 private 已聲明可訪問性——C#5規範3.5.11、其實只有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 listin 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.1g++ test.cpp -std=c++11 -Wallno 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 |