C++基礎面試題及答案


C++

  1. C++ 和C的主要區別

    C語言是面向過程編程,C++是面向對象編程,C++ 完全兼容C

  2. C++有哪些特性,簡述對他們的理解

    封裝、繼承、多態

    封裝

    將的事物抽象成一個個集合(也就是所說的類),實現代碼的模塊化

    繼承

    子類可以繼承父類的方法,實現代碼重用

    多態

    子類繼承父類之后,父類指針指向子類對象,實現接口重用

  3. 引用和指針的區別

    1. 引用是變量的一個別名,內部實現是只讀指針
    2. 引用只能在初始化時被賦值,其他時候值不能被改變,指針的值可以在任何時候被改變
    3. 引用不能為NULL,指針可以為NULL
    4. 引用變量內存單元保存的是被引用變量的地址
    5. “sizeof 引用" = 指向變量的大小 , "sizeof 指針"= 指針本身的大小
    6. 引用可以取地址操作,返回的是被引用變量本身所在的內存單元地址
    7. 引用使用在源代碼級相當於普通的變量一樣使用,做函數參數時,內部傳遞的實際是變量地址
  4. 重載和重寫的區別

    重載:是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。

    重寫:是指子類重新定義父類虛函數的方法。

  5. C++ deletedelete[]的區別

    delete只會調用一次析構函數,而delete[]會調用每一個成員的析構函數

  6. const#define 相比,有何優點?

    const作用:定義常量、修飾函數參數、修飾函數返回值三個作用。被Const修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性

    const 常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查。而對后者只進行字符替換,沒有類型安全檢查,並且在字符替換可能會產生意料不到的錯誤

  7. 關鍵字static的作用

    1. 可以用於全局變量的定義:為該變量分配靜態存儲區。程序運行結束前不會被釋放。
    2. 聲明和定義靜態成員函數:表示該函數為靜態函數,只能在本文件中被調用。
    3. 定義靜態局部變量:只被初始化一次,只有程序運行結束才會釋放。區別是作用域的范圍

C++ - STL

  1. 使用過哪些STL容器

    vector,list,deque,map,multimap,set,multiset

  2. 使用過那些算法

    查找算法、排序算法、消除算法、計數算法、比較算法、變換算法、置換算法和容器管理等

Linux

  1. 使用過哪些linux命令

    文件管理命令 磁盤管理命令 網絡通信命令 系統管理命令 備份壓縮命令
    cat cd ifconfig ps bzip2
    cp ls iptables free gzip
    rm mkdir netstat kill tar
    find pwd ping yum unzip
  2. linux下多進程和多線程的區別

    線程具有許多傳統進程所具有的特征,故又稱為輕型進程(Light—Weight Process)或進程元;而把傳統的進程稱為重型進程(Heavy—Weight Process),它相當於只有一個線程的任務。在引入了線程的操作系統中,通常一個進程都有若干個線程,至少包含一個線程。

    根本區別:進程是操作系統資源分配的基本單位,而線程是處理器任務調度和執行的基本單位

    資源開銷:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。

    包含關系:如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕權進程或者輕量級進程。

    內存分配:同一進程的線程共享本進程的地址空間和資源,而進程之間的地址空間和資源是相互獨立的

    影響關系:一個進程崩潰后,在保護模式下不會對其他進程產生影響,但是一個線程崩潰整個進程都死掉。所以多進程要比多線程健壯。

    執行過程:每個獨立的進程有程序運行的入口、順序執行序列和程序出口。但是線程不能獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制,兩者均可並發執行

  3. 進程間通信的方式有哪些

    管道

    共享內存

    套接字

    內存映射

    信號(一般不用,優先級太高容易打斷程序正常執行,且攜帶信息量小)

QT

  1. 使用過哪些QT控件

    Widget

    dialog

    Box

    button

    ...

  2. 使用過哪些QT事件

    keyboard 鍵盤事件

    mouse 鼠標事件

    timer 定時器事件

    ...

  3. QT信號槽機制的優缺點

    優點

    1. QT信號槽機制的引用精簡了程序員的代碼量 (不用寫回調函數)
    2. QT的信號可以對應多個槽(但他們的調用順序隨機),也可以多個槽映射一個信號
    3. QT的信號槽的建立和解除綁定十分自由

    缺點

    1. 信號槽同真正的回調函數比起來時間的耗損還是很大的,所有在嵌入式實時系統中應當慎用
    2. 信號槽的參數限定很多例如不能攜帶模板類參數,不能出現宏定義等等
  4. QT下UDPTCP的通信流程

    QT下udp通信服務器端和客戶端的關系是對等的, 做的處理也是一樣的

    1. 創建套接字對象
    2. 如果需要接收數據, 必須綁定端口
    3. 發送數據: writeDatagram
    4. 接收數據: readDatagram

    TCP

    服務器端:

    1. 創建用於監聽的套接字
    2. 給套接字設置監聽
    3. 如果有連接到來, 監聽的套接字會發出信號newConnected
    4. 接收連接, 通過nextPendingConnection()函數, 返回一個QTcpSocket類型的套接字對象(用於通信)
    5. 使用用於通信的套接字對象通信
    6. 發送數據: write
    7. 接收數據: readAll/read

    客戶端:

    1. 創建用於通信的套接字
    2. 連接服務器: connectToHost
    3. 連接成功與服務器通信
    4. 發送數據: write
    5. 接收數據: readAll/read

CODE

  1. 寫出下列程序執行后的結果

    #include <iostream.h> 
    
    class A
    {
        virtual void g()
        {
            cout << "A::g" << endl;
        }
    private:
        virtual void f()
        {
            cout << "A::f" << endl;
        }
    };
    class B : public A
    {
        void g()
        {
            cout << "B::g" << endl;
        }
        virtual void h()
        {
            cout << "B::h" << endl;
        }
    };
    typedef void( *Fun )( void );
    void main()
    {
        B b;
        Fun pFun;
        for(int i = 0 ; i < 3; i++)
        {
            pFun = ( Fun )*( ( int* ) * ( int* )( &b ) + i );
            pFun();
        }
    }
    /*
    輸出結果: 
    B::g 
    A::f 
    B::h
    */
    
  2. 寫出下列程序執行后的結果

    #include <iostream.h> 
    
    main()
    {
        int x[]= {10, 20, 30, 40, 50 };
        int *p;
        p=x;
        cout << *(p+2) << endl;
    }
    /*
    運行結果為:
    30
    */
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM