1.浩鯨雲 筆試35個選擇題加3個程式設計題,答的慘不忍睹,回憶一下還記得的然後做個總結
1.1選擇題
1.1.1c++是絕對型別安全的嗎
型別安全很大程度上可以等價於記憶體安全,型別安全的**不會試圖訪問自己沒被授權的記憶體區域。「型別安全」常被用來形容程式語言,其根據在於該門程式語言是否提供保障型別安全的機制;有的時候也用「型別安全」形容某個程式,判別的標準在於該程式是否隱含型別錯誤。型別安全的程式語言與型別安全的程式之間,沒有必然聯絡。好的程式設計師可以使用型別不那麼安全的語言寫出型別相當安全的程式,相反的,差一點兒的程式設計師可能使用型別相當安全的語言寫出型別不太安全的程式。絕對型別安全的程式語言暫時還沒有。
c++的型別安全
如果c++使用得當,它將遠比c更有型別安全性。相比於c,c++提供了一些新的機制保障型別安全:
(1)操作符new返回的指標型別嚴格與物件匹配,而不是void*;
(2)c中很多以void*為引數的函式可以改寫為c++模板函式,而模板是支援型別檢查的;
(3)引入const關鍵字代替#define constants,它是有型別、有作用域的,而#define constants只是簡單的文字替換;
(4)一些#define巨集可被改寫為inline函式,結合函式的過載,可在型別安全的前提下支援多種型別,當然改寫為模板也能保證型別安全;
(5)c++提供了dynamic_cast關鍵字,使得轉換過程更加安全,因為dynamic_cast比static_cast涉及更多具體的型別檢查。
即便如此,c++也不是絕對型別安全的程式語言。如果使用不得當,同樣無法保證型別安全。如使用void空型別指標或對兩種型別的指標進行強制轉換。
1.1.2 c++不可過載的運算子?
. :成員訪問運算子
., ->*:成員指標訪問運算子
:: :域運算子
sizeof:長度運算子
?: 條件運算子
#:預處理符號
1.1.3 c++中內聯函式和模板函式都是延遲編譯的嗎
每個函式模板實際上要被編譯兩次,一次是在例項化之前,先檢查函式模板本身,檢查語法是否正確。另一次是在例項化期間,結合所使用的引數型別,再次檢查模板**,檢視是否所有的呼叫都有效。但是要注意只有第二次編譯時才會產生真正二進位制的機器指令。作為第一次編譯的結果,僅僅是在編譯器內部形成乙個用於描述該函式模板的資料結構,即多為模板內部表示,這種對模板函式的特出處理稱為延遲編譯。
內聯展開發生在編譯階段中。
1.1.4 建構函式與析構函式的呼叫順序
建構函式先呼叫基類的再呼叫派生類的,析構函式先呼叫派生類的再呼叫基類的。
1.1.5 哪個函式可以是虛函式。 a.自定義建構函式 b.拷貝建構函式c.友元函式 d.預設等號操作賦值符
不能宣告為虛函式的函式
一.不能被繼承的函式 二.不能被重寫的函式
1)普通函式
普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。
而多型體現在執行時繫結。通常通過基類指標指向子類物件實現多型。
2)友元函式
友元函式不屬於類的成員函式,不能被繼承。對於沒有繼承特性的函式沒有虛函式的說法。
3)建構函式
首先說下什麼是建構函式,建構函式是用來初始化物件的。假如子類可以繼承基類建構函式,那麼子類物件的構造將使用基類的建構函式,而基類建構函式並不知道子類的有什麼成員,顯然是不符合語義的。從另外乙個角度來講,多型是通過基類指標指向子類物件來實現多型的,在物件構造之前並沒有物件產生,因此無法使用多型特性,這是矛盾的。因此建構函式不允許繼承。
4)內聯成員函式
我們需要知道內聯函式就是為了在**中直接展開,減少函式呼叫花費的代價。也就是說內聯函式是在編譯時展開的。而虛函式是為了實現多型,是在執行時繫結的。因此顯然內聯函式和多型的特性相違背。
5)靜態成員函式
首先靜態成員函式理論是可繼承的。但是靜態成員函式是編譯時確定的,無法動態繫結,不支援多型,因此不能被重寫,也就不能被宣告為虛函式。
1.1.6類c是以多重繼承的方式從類a和類b繼承而來的,類a和類b無公共的基類,那麼()
a. 可改用單繼承的方式實現類c的功能。
b. 類a類b只少有乙個是虛基數
c. 類c的繼承方式只能採用public繼承
d. 類a和類b至少有乙個是抽象類。
類a和類b沒有公共的基類,排除b選項
c、d選項太絕對。
只剩下a選項了。
虛基類 是相對於它的派生類而言的,它本身可以是乙個普通的類。
只有它的派生類虛繼承它的時候,它才稱作虛基類,如果沒有虛繼承的話,就稱為基類。比如類b虛繼承於類a,那類a就稱作類b的虛基類,如果沒有虛繼承,那類b就只是類a的基類。
虛繼承主要用於乙個類繼承多個類的情況,避免重複繼承同乙個類兩次或多次。
由類a派生類b和類c,類d又同時繼承類b和類c,這時候類d就要用虛繼承的方式避免重複繼承類a兩次。
在c++中引入虛基類的目的在於消除類繼承層次**現的「二義性」問題;所謂「二義性」
抽象類是指帶有有乙個或乙個以上的純虛函式的類。抽象類一般值用於繼承,不能定義類物件,但可以定義類指標和引用。
包含有「純虛函式」的類就是抽象類。它是一種特殊的類,不能直接定義物件,只有通過子類派生並實現它其中的純虛函式,它才能真正使用!
書本原語「抽象類刻畫了一組子類的操作介面的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作介面,而完整的實現留給子類」。
1.1.7 float a+b+c==(a+c)+b==(c+a)+b
由於儲存精度問題,等式並不相等
1.1.8 對於乙個類中的函式int qq(int aa, int bb),現在呼叫qq(4,5)問類中a,b的值
aa–返回aa;–aa返回aa-1;
1.1.9使用流進行輸入輸出,哪乙個可以用來輸出 a.cerr b.cin c.cout d.clog
1.1.10哪乙個關鍵字可以用來修飾類中的函式 public register volatile
用關鍵字volatile宣告變數,是用來告訴編譯器每次對此變數的引用都需要從記憶體位址中讀取,即取消編譯器對此變數的優化編譯。
當對乙個變數頻繁讀寫時,需要反覆訪問記憶體,從而花費大量的訪問時間。為此,c語言提供了一種暫存器變數。這種變數存放在cpu的暫存器中,使用時,不需要訪問記憶體,而直接從暫存器中讀寫,從而提高了效率。對於迴圈次數較多的迴圈控制變數及迴圈體內反覆使用的變數,均可以定義為暫存器變數。
1.1.11那種類是存在但不可獲知 外部類
1.1.12實參呼叫了位址,那麼實參和形參
a.形參是實參的備份 b.實參是形參的備份 c.實參和形參是同一物件
1.2程式設計題
1.2.1手動實現string的四個函式 生成字串「test」並輸出
1.2.2將一串16進製制的字串轉換為10進製的數字並輸出
string sw;
cin>>sw;
int y=0;
for(int i=0;i='0')
else if(sw[i]<='f'&&sw[i]>='a')
else if(sw[i]<='f'&&sw[i]>='a')
}cout<1.2.3程式設計判斷並輸出這段**是由c++編譯器編譯的還是c編譯器編譯的
int main()
2020度小滿金融春招筆試
description 傳送門 時間限制 c c 語言 1000ms 其他語言 3000ms 記憶體限制 c c 語言 65536kb 其他語言 589824kb 題目描述 西西所在的國家有n座城市,每座城市都有一道傳送門,城市 i 的傳送門通往城市 a i 當西西位於城市 i 時,每次他可以執行以...
快手2020校招筆試題 2019 8 25
求解字串表示的一元一次方程。思路 將等式右側的表示式左移,即將等號替換為 並在最後新增上 然後將表示式的變數x替換為虛數的1j,這樣就能通過python的eval函式來進行求值,得到a bj,把虛數j看成x,得到x a b。最後判斷結果是否符合題意。感想 將x轉為虛數的想法真的強,python的ev...
網易2020校招筆試(正式批)
function fun var f fun.call var t1 f.call var t2 f call var t3 f call const a tostring get alert a 這題考查valueof 與tostring 的區別。在不重寫這兩個方法時 tostring 方法 返回...