關(guān)于c++的inline關(guān)鍵字,以下說(shuō)法正確的是()
正確答案: D ??你的答案: A?(錯(cuò)誤)
A使用inline關(guān)鍵字的函數(shù)會(huì)被編譯器在調(diào)用處展開(kāi)
B頭文件中可以包含inline函數(shù)的聲明
C可以在同一個(gè)項(xiàng)目的不同源文件內(nèi)定義函數(shù)名相同但實(shí)現(xiàn)不同的inline函數(shù)
D定義在Class聲明內(nèi)的成員函數(shù)默認(rèn)是inline函數(shù)
E優(yōu)先使用Class聲明內(nèi)定義的inline函數(shù)
F優(yōu)先使用Class實(shí)現(xiàn)的內(nèi)inline函數(shù)的實(shí)現(xiàn)
A?如果只聲明含有inline關(guān)鍵字臭埋,就沒(méi)有內(nèi)聯(lián)的效果洒放。?內(nèi)聯(lián)函數(shù)的定義必須放在頭文件中, 編譯器才能在調(diào)用點(diǎn)內(nèi)聯(lián)展開(kāi)定義.???有些函數(shù)即使聲明為內(nèi)聯(lián)的也不一定會(huì)被編譯器內(nèi)聯(lián), 這點(diǎn)很重要; 比如虛函數(shù)和遞歸函數(shù)就不會(huì)被正常內(nèi)聯(lián). 通常, 遞歸函數(shù)不應(yīng)該聲明成內(nèi)聯(lián)函數(shù).
B?內(nèi)聯(lián)函數(shù)應(yīng)該在頭文件中定義硕盹,這一點(diǎn)不同于其他函數(shù)栋猖。編譯器在調(diào)用點(diǎn)內(nèi)聯(lián)展開(kāi)函數(shù)的代碼時(shí),必須能夠找到 inline 函數(shù)的定義才能將調(diào)用函數(shù)替換為函數(shù)代碼像啼,而對(duì)于在頭文件中僅有函數(shù)聲明是不夠的俘闯。
C 當(dāng)然內(nèi)聯(lián)函數(shù)定義也可以放在源文件中,但此時(shí)只有定義的那個(gè)源文件可以用它忽冻,而且必須為每個(gè)源文件拷貝一份定義(即每個(gè)源文件里的定義必須是完全相同的)真朗,當(dāng)然即使是放在頭文件中,也是對(duì)每個(gè)定義做一份拷貝僧诚,只不過(guò)是編譯器替你完成這種拷貝罷了遮婶。但相比于放在源文件中,放在頭文件中既能夠確保調(diào)用函數(shù)是定義是相同的湖笨,又能夠保證在調(diào)用點(diǎn)能夠找到函數(shù)定義從而完成內(nèi)聯(lián)(替換)蹭睡。
對(duì)于由兩個(gè)文件compute.C和draw.C構(gòu)成的程序來(lái)說(shuō),程序員不能定義這樣的min()函數(shù)赶么,它在compute.C中指一件事情,而在draw.C中指另外一件事情脊串。如果兩個(gè)定義不相同辫呻,程序?qū)?huì)有未定義的行為:
????? 為保證不會(huì)發(fā)生這樣的事情,建議把inline函數(shù)的定義放到頭文件中琼锋。在每個(gè)調(diào)用該inline函數(shù)的文件中包含該頭文件放闺。這種方法保證對(duì)每個(gè)inline函數(shù)只有一個(gè)定義,且程序員無(wú)需復(fù)制代碼缕坎,并且不可能在程序的生命期中引起無(wú)意的不匹配的事情怖侦。
D?正確。?定義在類(lèi)聲明之中的成員函數(shù)將自動(dòng)地成為內(nèi)聯(lián)函數(shù),例如:
1classA {?public: ?voidFoo(intx,?inty) { ... }?// 自動(dòng)地成為內(nèi)聯(lián)函數(shù)?? }?
EF在每個(gè)調(diào)用該inline函數(shù)的文件中包含該頭文件匾寝。這種方法保證對(duì)每個(gè)inline函數(shù)只有一個(gè)定義搬葬,且程序員無(wú)需復(fù)制代碼,并且不可能在程序的生命期中引起無(wú)意的不匹配的事情艳悔。最好只有一個(gè)定義急凰!
靜態(tài)方法屬于整個(gè)類(lèi),在對(duì)象創(chuàng)建之前就已經(jīng)分配空間猜年,類(lèi)的非靜態(tài)成員要在對(duì)象創(chuàng)建后才有內(nèi)存抡锈,所有靜態(tài)方法只能訪問(wèn)靜態(tài)成員,不能訪問(wèn)非靜態(tài)成員乔外;
靜態(tài)成員可以被任一對(duì)象修改床三,修改后的值可以被所有對(duì)象共享。
下面列出三種不同的繼承方式的基類(lèi)特性和派生類(lèi)特性杨幼。
?publicprotectedprivate
共有繼承publicprotected不可見(jiàn)
私有繼承privateprivate不可見(jiàn)
保護(hù)繼承protectedprotected不可見(jiàn)
在上圖中:1)基類(lèi)成員對(duì)派生類(lèi)都是:共有和保護(hù)的成員是可見(jiàn)的撇簿,私有的的成員是不可見(jiàn)的。
?????????????????? 2)基類(lèi)成員對(duì)派生類(lèi)的對(duì)象來(lái)說(shuō):要看基類(lèi)的成員在派生類(lèi)中變成了什么類(lèi)型的成員推汽。如:私有繼承時(shí)补疑,基類(lèi)的共有成員和私有成員都變成了派生類(lèi)中的私有成員,因此對(duì)于派生類(lèi)中的對(duì)象來(lái)說(shuō)基類(lèi)的共有成員和私有成員就是不可見(jiàn)的歹撒。