1. <tbody id="y0n05"><nobr id="y0n05"><input id="y0n05"></input></nobr></tbody><strong id="y0n05"><acronym id="y0n05"></acronym></strong>

          1. 文思海輝 2021 技術崗面試題

            小編:管理員 1410閱讀 2021.10.10

            第1題:

            在C++程序中調用被C編譯器編譯后的函數,為什么要加extern “C”?



            ?函數經過編譯系統的翻譯成匯編,函數名對應著匯編標號。?

            ?因為C編譯函數名與得到的匯編代號基本一樣,如:fun()=>_fun, main=>_main?

            ?但是C++中函數名與得到的匯編代號有比較大的差別。?

            ?如:由于函數重載,函數名一樣,但匯編代號絕對不能一樣。?

            ?為了區分,編譯器會把函數名和參數類型合在一起作為匯編代號,?

            ?這樣就解決了重載問題。具體如何把函數名和參數類型合在一起,?

            ?要看編譯器的幫助說明了。?

            ?這樣一來,如果C++調用C,如fun(),則調用名就不是C的翻譯結果_fun,?

            ?而是帶有參數信息的一個名字,因此就不能調用到fun(),為了解決?

            ?這個問題,加上extern "C"表示該函數的調用規則是C的規則,則調用?

            ?時就不使用C++規則的帶有參數信息的名字,而是_fun,從而達到調用?

            ?C??函數的目的。?



            第2題:

            關聯、聚合以及組合的區別?



            關聯:指的是模型元素之間的一種語義聯系,是類之間的一種很弱的聯系。關聯可以有方向,可以是單向關聯,也可以是雙向關聯??梢越o關聯加上關聯名來描述關聯的作用。關聯兩端的類也可以以某種角色參與關聯,角色可以具有多重性,表示可以有多少個對象參與關聯??梢酝ㄟ^關聯類進一步描述關聯的屬性、操作以及其他信息。關聯類通過一條虛線與關聯連接。對于關聯可以加上一些約束,以加強關聯的含義。
            ??關聯在C++中呈現為:?

            ?class A{...}?
            ???class B{ ...}
            ?A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b)?

            ?即一個類作為另一個類方法的參數。?

            ?聚合:指的是整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如一個航母編隊包括??漳概?、驅護艦艇、艦載飛機及核動力攻擊潛艇等。需求描述中“包含”、“組成”、“分為叢糠?”等詞常意味著聚合關系。?

            ?組合:也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。?

            ?聚合和組合的區別在于:聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。?

            ?我們用淺顯的例子來說明聚合和組合的區別?!皣萍彝觥?,國滅了,家自然也沒有了,“國”和“家”顯然也是組合關系。而相反的,計算機和它的外設之間就是聚合關系,因為它們之間的關系相對松散,計算機沒了,外設還可以獨立存在,還可以接在別的計算機上。在聚合關系中,部分可以獨立于聚合而存在,部分的所有權也可以由幾個聚合來共享,比如打印機就可以在辦公室內被廣大同事共用。?

            ?在C++語言中,從實現的角度講,聚合可以表示為:?

            ?class A {...}?
            ???class B { A* a; .....}?

            ?即類B包含類A的指針;?

            ?而組合可表示為:?

            ?class A{...}?
            ???class B{ A a; ...}?

            ?即類B包含類A的對象。?

            ?關聯和聚合的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚合則一般不是平等的,例如一個公司包含了很多員工,其實現上是差不多的。聚合和組合的區別則在語義和實現上都有差別,組合的兩個對象之間其生命期有很大的關聯,被組合的對象是在組合對象創建的同時或者創建之后創建,在組合對象銷毀之前銷毀。一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬于一個組合對象,例如一個文檔的版本,必須依賴于文檔的存在,也只能屬于一個文檔。聚合則不一樣,被聚合的對象可以屬于多個聚合對象,例如一個員工可能可以屬于多個公司。?



            第3題:

            ?面向對象的三個特征,并簡述之。?



            第4題:

            ?什么時候使用“常引用”?



            ?如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。?



            第5題:

            ?static??有什么用途??



            ?①限制變量的作用域;?

            ?②設置變量的存儲域;?



            第6題:

            改錯題?

            ?Void GetMemory??(??char *buf,int size??)?

            ?{?

            ??????? if(buf != NULL ) free( buf );?

            ??????? buf = (char *) malloc ( size );?

            ?}?




            ?Int main(int argc, char *argv? )?

            ?{?

            ??????? char * buf;?

            ??????? GetMemory( buf , 10);?

            ??????? printf(“%s”,buf);?

            ??????? free(buf);?

            ??????? if(buf != NULL)?

            ?{?

            ??????? Printf(“%s”,buf);?

            ?}?

            ?return 1;?

            ?}?



            第7題:

            ?已知string類定義如下,寫出類的成員函數實現。?

            ?Class String?

            ?{?

            ?Public??:?

            ??????? String??(??const char *str = NULL??)??;?

            ??????? String ( const String &another );?

            ??????? ~String();?

            ??????? String & operater = (const String &rhs);?

            ?Private:?

            ??????? Char *m_data;?

            ?}?



            第8題:

            ?寫一個雙向鏈表的插入和刪除操作?



            第9題:

            ?線性表a , b 為兩個有序升序的線性表,編寫一程序,使兩個有序線性表合并成一個有序升序線性表h?


            關聯標簽:
            国产欧美日韩激情视频一区,久久无码中文字幕无码网站,99久久久成人毛片无码,国产国语脏话对白免费视频,丰满熟女大屁股水多多