1. 程式人生 > >C++進階 必讀書籍

C++進階 必讀書籍

轉載:http://blog.csdn.net/ajian005/article/details/8003655

Java學習之路

一直有這麼個想法,列一下我個人認為在學習和使用Java過程中可以推薦一讀的書籍,給初學者或者想深入的朋友一些建議,幫助成長。推薦的的都是我自己讀過,也會推薦一些朋友讀過並且口碑不錯的書籍。

一、基礎類

1、《Thinking in java》(閱讀2遍),入門第一位是建立正確的概念。
2、《Core Java》,我沒系統讀過,這本書更貼近實踐,更多API的介紹,同樣,更新也更頻繁。

二、進階類

1、《Effective Java》(閱讀1遍),在熟悉語法、API之後,你需要知道最佳實踐和陷阱,沒有比這本更好的。

2、《深入Java虛擬機器》(閱讀2遍),翻譯一般,但不可不讀,最好結合最新的JVM規範來讀。
3、《Java Puzzlers》,通過謎題介紹一些你可能沒有注意到的邊角料,作為趣味讀物也不錯


三、特定領域

1、併發程式設計:

(1)《Java Concurrency in Practic》(閱讀1遍),併發領域必讀經典。
(2)《Java併發程式設計:設計原則與模式》,同樣是Doug lea的作品。
(3)《java threads》,入門讀物。
(4)《Programming Concurrency on the JVM:Mastering Synchronization, STM, and Actors》

2、集合程式設計:

 Collection Framworks/STL,資料結構和演算法:《演算法概論》 《演算法導論》 《計算機程式設計藝術》
《Java Generics and Collections》

3、網路程式設計:

(1) O’Reilly的《Java nio》,很多人都推薦,我個人覺的一般,基本上只是個API更詳細的說明文件,O’reilly的java系列很多都是這樣。
(2)我更推薦這本《Fundamental networking in java》,由淺入深教你怎麼做java網路程式設計,並且介紹很多背景知識,甚至介紹了各種最佳實踐、網路程式設計模型以及Java socket在不同平臺之間的差異等等。

4、web程式設計

(1) Servlet規範
(2) JSP規範
(3) JavaBean規範
(4) JMS/Java Naming and Directory Interface(JNDI)/JDBC/Java Transaction API(JTA)
(5) Struct2 + Spring + ibatis/hibernate/jdbc/

四、模式與設計

1架構模式、

1、《分析模式——可複用物件模型》
2、《面向模式的軟體體系結構》,國內貌似翻譯了5卷,絕對經典,可惜翻譯較差。
3、《企業應用架構模式》(2遍)
4、《分散式架構:選一本書》

2設計模式

1、《設計模式》,GOF的經典。
2、《設計模式精解》(1遍),應該有最新版,個人認為更適合入門。
3、《Head first設計模式》,更輕鬆的入門讀物。
4、《Java與模式》

3程式碼模式/慣例/編碼規範

1、《程式碼大全》(1遍)

4 重構

1、《重構——改善既有程式碼設計》(1遍),想寫好程式碼必讀。
2、《重構與模式》


五、方法論/軟體工程

1、《敏捷軟體開發》
2、《測試驅動開發》(1遍),你不一定要TDD,但是你一定要學會做單元測試。
3、《Agile Java》,也可以作為java入門讀物。
4、《快速軟體開發》
5、《面向物件分析與設計》,OO設計必讀。
6、《Unix程式設計藝術》(1遍),開啟你的眼界。

六、Java之外

1、 《深入理解計算機系統》
2、 《演算法導論》閱讀(0.4遍)基本部分閱讀,其它參考閱讀
3、  OS部分:《深入Linux核心架構》《Linux核心設計與實現》《Linux核心分析與作業系統設計》 《Linux/UNIX系統程式設計手冊》
4、 《TCP/IP詳解》(三卷)、《UNlX環境高階程式設計》《unix網路程式設計》(兩卷),學習網路程式設計必讀書。
5、 《C++網路程式設計》上下兩卷,介紹ACE的,但是其中對各種模式運用的介紹非常值的一讀。
7、 《編譯原理》龍書,最新版用java解釋,我沒有讀完,順便提下。
6、 《計算機程式的構造與解釋》,必讀
8、 《資料庫概念》
9、 《Joel說軟體》程式設計文化
10、《人月神話》、《人件》
11、《卓有成效的程式設計師》(閱讀1遍),給我很大啟發的一本書。
12、《程式設計師修煉之道》

參考: 
我的Java學習推薦書目 http://jm-blog.aliapp.com/?p=522
Java開發實用權威書籍集合 http://www.iteye.com/news/21791/
學習JVM的References  http://jm-blog.aliapp.com/?p=525


C++學習之路

1 why要學習C/C++/object-c?

最近想寫點有用的東西,發現自己最拿手的java用起來真是笨手笨腳的。
碰到好多實現起來巨繁瑣的問題,比如操作底層庫,和OS framework互動,做個使用者體驗好點的本地圖形程式等等,這些都是java的軟肋。

其實,我一直對底層頗感興趣,工作中也只能接觸一下JVM,但VM畢竟是VM,始終與底層失之交臂。
Linux、Mysql、Memcached、Boost、Apache、JVM、ACE... ... 很多基礎服務都是用C/C++實現的,要像瞭解他們原理、能看懂程式碼、可以修改bug、增加新功能模組

開發嵌入式、中小型專案C/C++專案,維護C/C++專案... ...

加深對系統底層的理解

2 How學習C/C++?

下文是我整理的一些C++圖書列表,按順序閱讀,可涵蓋入門到精通。

《The C programming language》必讀

《C++ Primer》,號稱是一本可以讓你從C或JAVA程式設計師轉為一個真正的C++程式設計師的入門參考書,必讀。

《The C++ programming language》,C++之父,人稱B教主著作,在看過C++ primer後,應該可以跳章選讀。

《Think in c++》,網上說此書的中文版翻譯質量奇差,推薦看影印版,選讀。

《Effective c++》,類似 Effective java,講的是最佳實踐,程式設計師必讀。

《More effective c++》,上書的補充。

《The C++ standard library》,會寫C,不會用標準庫怎麼行。這就跟java程式設計師不會用java.util包一樣,必讀。

《Effective STL》,STL庫的最佳實踐。Effective C++作者又一力作,必讀。

《The annotated STL source》,STL原始碼分析,這本書應該算是深入/精通類了,選讀。

《Generic programming and STL》,號稱C++程式設計裡,就是跟模板,泛型打交道,那麼精通泛型是勢在必行。

《C++ Template》,C++模板程式設計,程式碼複用的經驗之道,必讀。

《Exceptional C++》,跟Effective C++類似,屬於最佳實踐和難題解析,書中列出了許多應用場景和例項程式碼供讀者揣摩,選讀。

《More Exceptional C++》,上書的補充。

《Exceptional C++ Style》,上上書的補充

《Inside The C++ Object Model》,有了上面這些書做鋪墊,那麼終於可以讀此神書了。它會帶你遊覽C++物件模型的底層實現機制。讀完此書,任何C++程式碼看起來如同行雲流水,必讀。

3 優秀的C/C++開源專案(閱讀程式碼)

OS: Linux kernel  LVS、Linux應用程式

DB: Mysql、PostgreSQL

Complier: JVM、GCC

Framework: OpenSip、SipProxy、

Net: ACE(Java Mina、Netty)、TCP/IP、HTTP協議棧

Cache: Memcached、Redis、

Library: STL(java util package)、Boost、Qt(UI)、

balance: Apache、Nginx

... ...

部分轉載請註明原文連結:http://kenwublog.com/a-java-programmer-learning-cpp

推薦的一些C\C++書籍:http://blog.jobbole.com/61308/

自學者可以參考的學習順序(Linux C++現場全科班培訓的順序)

http://www.xuanyuan-soft.cn/

      Linux C++全科班課程,專注Linux/UNIX伺服器端軟體開發(後臺開發),培養企業所需的專業Linux/UNIX C++軟體工程師。課程涉及UNIX/Linux伺服器端軟體開發的各個方面:Linux/UNIX、C++、Boost、ACE、Oracle /MySQL、企業級的實戰專案等。

上課方式

       全日制脫產學習、歷時4個月(120天 * 10小時 = 1200小時)。

課程模組

       Linux C++全科班課程由以下模組組成:

Module01 - Linux系統基礎

       由於本系列課程基於Linux(或UNIX),熟悉Linux作業系統是必要的前提。 該模組的課程包含以下方面的內容:

  • 常用Unix/Linux命令
    熟悉檔案管理、文字處理、程序管理、網路、系統管理等各個方面大約100個常用的命令。
  • 深入瞭解bash
    瞭解Linux預設shell: bash 的語法、命令執行、I/O重定向、任務控制等。
  • 正則表示式基礎
    由於UNIX/Linux中很多強大的文字處理命令如:grep、awk、sed,還有vi編輯器等工具配合正則表示式將產生強大的威力,所以熟悉正則表示式語法是十分必要的。
  • find、grep、sed、awk
    四個強大的UNIX工具,特別是sed、awk在文字處理方面的能力非常強大,在Linux下工作應該掌握這幾個命令。

Linux環境高階程式設計

 一、課程目標
本次課程涵蓋Linux系統程式設計的幾個主要方面,通過本次課程的學習,學員將具備以下能力:
    瞭解Linux系統呼叫和類庫的區別;
    熟悉檔案I/O、檔案和目錄、程序管理、程序間通訊(IPC)、訊號、時間與定時器的程式設計。
二、參訓要求
參加本次課程的學員須具備以下能力:
    本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
    能熟練使用常用的Linux命令;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文字編輯器其中的一種。
三、課程實踐環境
    學員自備電腦
    作業系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、預備知識
    UNIX歷史和標準
        UNIX; BSD & System V
        GNU project; Linux Kernel
        POSIX, SUSv3, SUSv4
    Linux系統相關概念
        系統呼叫和庫函式
        錯誤處理
        特性測試巨集
        系統資料型別
        系統限制和選項 (sysconf(), pathconf())
        系統引數: /proc檔案系統
2、檔案I/O
    Linux I/O系統呼叫與C標準庫stdio的比較
    I/O系統呼叫: open(), close(), read(), write()
    控制I/O的Buffer
    讀寫指標的定位:lseek()
    I/O控制:ioctl()
    原子操作和資料競態
    檔案控制: fcntl()
    檔案開啟的狀態標誌(status flags)
    檔案描述符
    複製檔案描述符:dup(), dup2()
3、檔案和目錄
    檔案屬性
        獲取檔案的屬性:stat()
        檔案的時間戳
        檔案的所有權:chown()
        檔案的操作許可權:chmod()
    目錄和連線檔案
        硬連線和軟連線 (符號連線)
        目錄
        迭代目錄樹
        當前工作目錄(CWD)
        路徑名
    監控檔案系統的事件:inotify
        inotify API
        inotify事件
        inotify限制
4、程序控制
    程序屬性
        程序ID(PID)和父程序ID(PPID)
        程序記憶體佈局
        棧 (Stack)
        堆 (Heap)
        命令列引數和環境變數列表
        非區域性goto (nonlocal goto):setjmp() 和 longjmp()
    建立和終止程序
        建立程序:fork()
        fork() 後的多程序資料競態
        程序終止:exit(3) 和 _exit(2)
        退出處理器:atexit()
        等待子程序的退出:wait(), waitpid(), waitid()
        SIGCHLD 訊號
    執行程式
        execve()
        exec() 系列庫函式
        解釋指令碼
        檔案描述符和 exec()
        訊號和 exec()
        執行Shell命令:system()
    守護程序 (Daemons)
        建立守護程序的幾個步驟
        使用 SIGHUP 訊號使一個程序變成守護程序
        系統中守護程序的示例:syslog
    程序許可權相關
        檔案 /etc/passwd 和 /etc/group
        User ID, and Group ID
        Real, effective, and saved set IDs
        其它 group IDs
        Set-user-ID and set-group-ID programs
        獲取或修改程序許可權
5、訊號 (Signals)
    訊號型別和預設動作
    訊號處理方式
    訊號處理器
    傳送訊號
    訊號集
    阻塞訊號(signal mask)
    系統呼叫的中斷和重新執行
    等待訊號
6、時間和定時器(Timers) 
    時間相關的資料型別
    POSIX Clock
    獲取當前時間
    設定當前時間
    C標準庫 時間函式
    Sleep
    定時器(Timers)
        簡單的定時器:alarm()
        interval Timers
        高階定時器
7、程序間通訊 (Interprocess Communication, IPC)
    傳統UNIX IPC
        管道和優先佇列 (Pipe and FIFO)
        SYSV 訊息佇列 (SYSV Message Queue)
        SYSV 訊號量 (SYSV Semaphore)
        SYSV 共享記憶體 (SYSV Shared Memory Segments)
        記憶體對映檔案 (Memory Mapping Files)
    POSIX IPC
        POSIX IPC的優勢
        POSIX 訊息佇列 (POSIX Message Queue)
        POSIX 訊號量 (POSIX Semaphore)
        POSIX 共享記憶體 (POSIX Shared Memory Segments)
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
    Day1
        1 - 預備知識
        2 - 檔案I/O
        3 - 檔案與目錄
    Day2
        4 - 程序控制
        5 - 訊號
        6 - 定時器
    Day3
        7 - 程序間通訊
        課程回顧與總結
六、課程資源


Module02 - Linux開發環境

       不同系統平臺下的開發工具、開發環境各有不同。該模組課程關注的是Linux C++/C開發所必需的一系列工具:

  • vi(vim)文字編輯器
    一個UNIX世界標準的文字編輯器,簡約而強大,不論作為開發人員還是系統管理員,熟練使用vi是一項基本的、且不可或缺的技能。
  • gcc/g++ C/C++編譯器
    通過具體的示例講解使用gcc/g++編譯單個、多個檔案、共享庫、靜態庫等。
  • gdb 偵錯程式
    通過具體的示例來熟悉通過gdb來除錯C/C++應用程式、修正應用程式執行期的錯誤。
  • make和makefile
    學習編寫makefile,使用make來構建一個完整的專案。
  • CVS - 版本控制
    運用CVS來進行程式碼的版本控制。
  • Eclipse CDT(Linux Emacs 、Windows MS Vistual Studio )
    一個非常強大的C/C++ IDE,強大的文字編輯器、與GCC工具鏈的無縫結合、方便的gdb前端、整合CVS/Subversion等版本控制等,提供眾多的便利,大大減輕開發者的負擔。

Linux高效能網路程式設計

 一、課程目標
本次課程深入講解Linux下的socket程式設計,並以此為基礎,著重討論如何提高網路服務端應用的效能,通過本次課程的學習,學員將收穫以下方面的成果:
    熟練使用socket系列函式進行網路程式設計;
    深刻理解服務端應用的效能要求;
    利用Linux提供的各種機制,有效地解決服務端應用的效能瓶頸。
二、參訓要求
參加本次課程的學員須具備以下能力:
    瞭解TCP/IP協議,有網路程式設計概念。
    本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
    能熟練使用常用的Linux命令;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文字編輯器其中的一種。
三、課程實踐環境
    學員自備電腦
    作業系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、POSIX Thread - 多執行緒
    執行緒管理
        執行緒建立:pthread_create()
        執行緒終止:pthread_exit()
        執行緒連線和分離:join and detach
    執行緒同步機制
        互斥體:mutex
        讀寫鎖:read-write lock
        條件變數:condition variable
    執行緒屬性控制
    mutex屬性控制
2、Socket 簡介
    Socket地址資料結構:struct sockaddr,struct sockaddr_in
    位元組序以及位元組序操作:ntohl(), ntohs(), htonl(), htons()
    Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
3、TCP Socket
    socket():建立socket
    bind():繫結地址
    listen():開始偵聽
    accept():接受來自客戶端的連線
    connect():連線到伺服器
    getsockname()和getpeername():獲取本地和對端地址
    I/O 操作:read(), write()
    更高效的I/O 操作:readv(), writev()
    TCP Server程式設計步驟
    TCP Server v1:迭代式Echo Server
    TCP Server v2:多程序併發式Echo Server,使用fork()和exec*()
    TCP Server v3:多執行緒併發式Echo Server,使用pthread
    TCP Client程式設計步驟
    TCP Client:Echo Client
4、UDP Socket
    recvfrom()和sendto():收發UDP資料報
    UDP Echo Server
    UDP Echo Client
    組播(Multicast)和廣播(Broadcast)
5、Socket Options和 IP Options
    常用的Socket Options
    常用的IP Options
    Socket選項和IP選項對網路應用的影響
6、I/O多路複用:構建反應式(Reactive)網路應用
    UNIX I/O多路複用機制概要
    為什麼I/O 多路複用對於網路應用很重要
    I/O 多路複用與多執行緒(反應式模型和併發模型)
    select / poll
    在TCP Server和UDP Server中使用select和poll
    Linux特有I/O 多路複用機制:Event poll (epoll)
    在TCP Server和UDP Server中使用epoll
7、非同步I/O:構建前攝式(Proactive)網路應用
    相關概念:同步I/O和非同步I/O、Proactor模式
    非同步I/O 是如何提高I/O 效能的
    非同步I/O系列操作
    使用非同步I/O的機制構建TCP Server
8、高效能網路程式設計討論
    考究高效能網路程式設計中應該遵循的原則,討論併發、同步、事件多路分離等機制的適用場合
    網路應用的瓶頸何在
    事件多路分離 vs 一連線一執行緒 (Event demultiplexing vs One thread per connection)
    同步I/O vs 非同步I/O (Synchronous I/O vs Asynchronous I/O)
    如何適當地使用多執行緒
    什麼時候需要多個 事件多路分離執行緒
9、應用層協議定義與實現
    為什麼要自定義應用層協議
    定義應用層協議 (以XMMEP協議為例)
    用C++實現自定義的協議 (以XMMEP協議為例)
注:XMMEP為X-Messenger Message Exchanging Protocol
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
    Day1
        1 - POSIX Thread - 多執行緒
        2 - Socket 簡介
        3 - TCP Socket
        4 - UDP Socket
        5 - Socket Options和 IP Options
    Day2
        6 - I/O多路複用:構建反應式(Reactive)網路應用
        7 - 非同步I/O:構建前攝式(Proactive)網路應用
        8 - 高效能網路程式設計討論
        9 - 應用層協議定義與實現
        課程回顧與總結
六、課程資源


Linux高階I/O機制

 一、課程目標
I/O常常是現代應用程式的效能瓶頸,為突破這個瓶頸,現代作業系統不斷推出新的I/O機制,使高效能的I/O程式設計變成可能。本次課程將討論Linux下幾種高效能I/O的機制,這些功能都是基於成熟的系統呼叫,通過本次課程的學習,學員將掌握以下內容:
    傳統File I/O;
    散/聚 I/O (Scatter/Gather I/O);
    阻塞式和非阻塞式I/O;
    I/O多路複用;
    select() ,  poll();
    Event poll (epoll);
    非同步I/O;
    運用I/O多路複用機制和非同步I/O機制提高網路應用的併發響應和效能。
二、參訓要求
    參加本次課程的學員須具備以下能力:
    本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
    能熟練使用常用的Linux命令;
    由於本次課程涉及socket程式設計,所以學員需有Linux下socket程式設計的經歷;
    能熟練使用gcc、gdb、熟練撰寫makefile;
    最好熟練使用vi、emacs等文字編輯器其中的一種。
三、課程實踐環境
    學員自備電腦
    作業系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
    編譯器:GCC v4.1+、GDB v7.0+
    可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、預備知識
    理解:UNIX下一切皆檔案
    I/O的實質和I/O的步驟
2、檔案I/O
    Linux I/O系統呼叫與C標準庫stdio的比較
    I/O系統呼叫: open(), close(), read(), write()
    控制I/O的Buffer
    讀寫指標的定位:lseek()
    I/O控制:ioctl()
    原子操作和資料競態
    檔案控制: fcntl()
    檔案開啟的狀態標誌(status flags)
    檔案描述符
    複製檔案描述符 (dup(), dup2())
3、散/聚I/O (Scatter/Gather I/O)
    什麼是散/聚 I/O,為什麼需要散/聚 I/O
    系統呼叫:readv(), writev()
4、I/O多路複用 (I/O Multiplexing)
    什麼是I/O多路複用
    I/O多路複用和多執行緒併發處理I/O的區別
    select(), poll():傳統的UNIX I/O多路複用機制
        select(), pselect()
        poll(), ppoll()
    Epoll:Linux系統新的I/O多路複用機制
        Event poll介紹
        建立epoll例項
        控制epoll
        等待I/O事件
        epoll的兩種觸發方式:水平觸發(level-triggered)、邊緣觸發(edge-triggered)
5、非同步I/O
    關於同步I/O:阻塞式I/O和非阻塞式I/O
    什麼非同步I/O
    理解同步I/O和非同步I/O的差別
    非同步I/O重要資料結構:非同步I/O控制塊--struct aiocb
    非同步讀、寫操作:aio_read(), aio_write()
    檢查非同步操作的結果:aio_error(), aio_return()
    取消非同步操作:aio_cancel()
    非同步檔案同步:aio_fsync()
6、使用高效能I/O機制提高網路服務端應用的效能
    為什麼傳統的I/O機制會導致服務端應用的效能瓶頸
    使用select()和poll()實現ACE中的Reactor模式
    使用epoll實現ACE中的Reactor模式
    在網路應用中使用非同步I/O機制:模擬ACE中Proactor模式和框架
    例項演示,區別傳統I/O機制和高效能I/O機制對於服務端應用的重要性
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
    Day1
        1 - 預備知識
        2 - 檔案I/O
        3 - 散/聚 I/O
        4 - I/O多路複用
    Day2
        5 - 非同步I/O
        6 - 高效能I/O機制和網路服務端應用

Module03 - C++程式語言

       深入講解C++程式語言的各個方面,即完整的C++語法講解:

  • 語言基礎
    詳細介紹變數、表示式、語句、指標、陣列、流程控制、函式、檔案組織等。
  • 抽象機制 - 面向物件程式設計
    深入講解C++的抽象機制,封裝(類)、繼承、多型;操作符過載、函式物件、異常處理等。
  • 模板 - 泛型程式設計
    詳細介紹C++的模板機制,類模板、函式模板、模板特化等方面的內容。

C++面向物件程式設計高階培訓

 一、課程目標
本次課程圍繞C++面向物件程式設計這一課題,深入的講解C++ OOP語言機制,以及運用面向物件技術有效架構C++應用。通過本次課程的學習,學員將具備以下能力:
    深刻理解C++面嚮物件語言機制;
    面向物件程式設計的若干法則。
二、參訓要求
參加本次課程的學員須具備以下能力:
    本次課程假定學員有程式設計經歷,使用C/C++、Java或其它語言實際編寫過程式碼;
    能熟練使用Windows或Linux下的C++編譯器(如g++)、偵錯程式(如gdb)。
三、課程實踐環境
    學員自備電腦
    實踐平臺 (以下二者之一):
        Win32 / Visual Studio 2008 (或更新)
        Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
四、課程大綱
本次課程由以下幾個部分構成:
1、從C到C++
    引用和指標:為什麼引用很重要
    const關鍵字:為什麼const很重要
    名字空間 (namespace)
2、深入C++物件
    關於C++物件
        內建型別的物件,如int、double物件
        自定義型別的物件
    物件型別的定義
        關鍵字class和struct
        類成員:成員函式和資料成員
        靜態資料成員
        成員的訪問控制
        物件的size
        關於this指標
        const成員函式、const究竟修飾什麼
        mutable資料成員
        4種特殊成員函式:constructor、destructor、copy constructor、operator=
        物件的構造、初始化列表
        物件的析構
        物件的複製
        什麼情況下有必要顯式定義4種特殊函式
    C++物件生命週期
3、操作符過載
    關於C++中操作符過載機制
    重要操作符過載
        算術運算:+, -, *, /, %, ++, --, ...
        關係運算:>, <, ==, !=
        下標存取:[ ]
        函式呼叫:(),函式物件
        型別轉換、單引數建構函式與隱式轉換、阻止隱式轉換 -- explicit關鍵字
    友元與成員
4、面向物件基礎 -- 繼承
    基類與派生類
    再談物件的構造與析構
    虛擬函式、純虛擬函式
    派生類的記憶體佈局、虛擬函式表
    多型、多型型別、如何體現多型
    虛析構、為什麼虛析構很重要
5、關於繼承更多的話題
    多繼承
    虛繼承與虛基類
    對基類的訪問、public / protected / private繼承
    Down cast:static_cast<>和dynamic_cast<>
    執行期型別識別 (RTTI)
6、C++與面向物件設計
    C++語言機制提供了完整的OOP支援
    超越繼承
    OOP若干法則和設計模式
        封裝變化,分離不變與變化
        面向介面程式設計,而不是針對實現程式設計
        多用組合、少用繼承
        努力保持互動物件間的鬆耦合
        類設計的開閉原則:類應該對擴充套件開放、對修改關閉
        依賴抽象,而不是依賴具體類
        最少知識原則
        好萊塢法則 (控制反轉):不要打電話給我,我會找你的
        單一責任原則:一個類應該只有一個引起變化的原因
五、時間安排
課程時間:3天,以每天6小時計,具體安排如下:
    Day1
        1 - 從C到C++
        2 - 深入C++物件
        3 - 操作符過載
    Day2
        4 - 面向物件基礎 -- 繼承
        5 - 關於繼承更多的話題
    Day3
        6 - C++與面向物件設計
        課程回顧與總結


Module04 - C++標準庫(注意:C++11規範增加了一些標準庫)

       完整地講解STL各大元件:容器、演算法、函式物件、容器介面卡、迭代器、迭代器介面卡等;另外還包括string、I/O stream;為了更好地瞭解STL容器的特性、排序演算法,額外安排:資料結構簡介和常用排序演算法簡介2個部分的內容。

  • 常用資料結構簡介
    介紹動態陣列、linked-list、binary search tree、rb-tree、hash table、stack、queue、heap等常用的資料結構。
  • STL容器詳細介紹
    vector、list、deque、stack、queue、priority_queue、map、set等容器的特性和用法。
  • 常見排序演算法介紹
    簡要介紹各種常見排序演算法的原理,及其實現。
  • STL演算法和預定義函式物件
    標準庫提供了多達60多個演算法函式,涉及排序、搜尋、排列組合等多個方面,其中多數演算法會使用如greater、less、binder2nd等函式物件,該單元的課程詳細介紹了上述演算法的使用和相關函式物件的具體作用。
  • 迭代器
    STL容器和演算法高度解耦,而演算法之所以能方便的作用於STL容器,維繫二者的就是迭代器。
    在這個單元的課程中講介紹C++迭代器的類別、各類迭代器介面卡的用法。
  • string - 字串
    相對於C風格的字串處理,C++提供了更安全和方便的字串型別 string,給class提供類眾多的方法確保針對字串處理的安全、便捷性。該單元的課程講完整地介紹string的使用。
  • I/O stream
    C++標準庫提供的一個強大的I/O流框架。本單元詳細介紹標準輸入/輸出、檔案輸入/輸出、字串輸入/輸出流的運用,利用操控符來控制輸入/輸出的格式。
  •  數值
    介紹C++數值運算的演算法,如valarray、4組數值演算法函式、隨機數等方面的內容。

C++泛型程式設計與STL高階培訓

 一、課程目標

C++作為一門多風格的程式設計語言,除了強大的面向物件支援外,泛型程式設計(模板機制)的支援更是極大程度上提高了C++的表現能力,現在模板的運用已成為C++類庫、應用程式中自然且不可分割的一部分,滲透到各個角落。本次課程將深入、細緻的講解C++模板機制、STL、Boost相關類庫的實現思路、手法以及其表現出的智慧,以企通過本次課程的學習,將這些經驗自如地用到後續的軟體開發中。這次課程關注:
    C++模板機制
    STL和Boost部分類庫的剖析

相關推薦

C++ 必讀書籍

轉載:http://blog.csdn.net/ajian005/article/details/8003655 Java學習之路 一直有這麼個想法,列一下我個人認為在學習和使用Java過程中可以推薦一讀的書籍,給初學者或者想深入的朋友一些建議,幫助成長。推薦的的都是我自己讀過

限時領取 | 人工智慧入門到必讀Python書籍PDF!

Python是一門簡單易學,功能強大的程式語言。它具有高效的高階資料結構和簡單而有效的面向物件程式設計方法。Python優雅的語法和動態型別以及其解釋性的性質,使它在許多領域和大多數平臺成為編寫指令碼和快速應用程式開發的理想語言。今天小編就給大家推薦3本Python相關的書籍。(想獲取本書電子版可以

C#系列——WebApi 異常處理解決方案(轉)

機制 輸出 ges 如果 但是 rom lba slist 解決 出處:http://www.cnblogs.com/landeanfen/p/5363846.html 閱讀目錄 一、使用異常篩選器捕獲所有異常 二、HttpResponseException自

C#系列——WebApi 接口測試工具:WebApiTestClient

spa type 區域 all 手動 shee 找到 網絡 打開文件 C#進階系列——WebApi 接口測試工具:WebApiTestClient 前言:這兩天在整WebApi的服務,由於調用方是Android客戶端,Android開發人員也不懂C#語法,API裏

C#系列——WebApi 路由機制剖析:你準備好了嗎?

事先 blank path can tex 全局配置 dex 找不到 save 前言:從MVC到WebApi,路由機制一直是伴隨著這些技術的一個重要組成部分。 它可以很簡單:如果你僅僅只需要會用一些簡單的路由,如/Home/Index,那麽你只需要配置一個默認路由就能簡

C#系列——WebApi 跨域問題解決方案:CORS

dea ati ice pro target default 異常 測試工具 復雜 前言:上篇總結了下WebApi的接口測試工具的使用,這篇接著來看看WebAPI的另一個常見問題:跨域問題。本篇主要從實例的角度分享下CORS解決跨域問題一些細節。 WebApi系列文章

程序員學習書籍

mysql 分享 redis設計 程序設計 即使 maria 核心 ria oop 一年復一年,兩年前的今天剛從指導老師手中接過畢業證書,仿佛就發生在昨天。多希望這一切不要走得太快,即使未來總會都許多新鮮的實物替代。 回顧這一年,也想不出學了什麽,但感覺改過的BUG肯定

[轉]C#系列——WebApi 接口返回值不困惑:返回值類型詳解

try 接口測試工具 des rep home creat port 調用 學習 本文轉自:http://www.cnblogs.com/landeanfen/p/5501487.html 閱讀目錄 一、void無返回值 二、IHttpActionResult

c#(1)—— Task Parallel Library 並行執行與串行執行

-128 serve 模擬 程序 www 操作 內存 兩個 1-1 本文參考的博文出處:http://www.cnblogs.com/stoneniqiu/p/4857021.html 總體說明: (1)、理解硬件線程和軟件線程   硬件線程也稱為邏輯內核,一個物理內核可以

C#之AOP

com aop uid spa amp ace 進階 c# php http://pic.cnhubei.com/space.php?uid=4614&do=album&id=1349648http://pic.cnhubei.com/space.php?u

C#系列——WebApi 身份認證解決方案:Basic基礎認證

str 常見 bre 這一 dex ace timeout ticket 結合 閱讀目錄 一、為什麽需要身份認證 二、Basic基礎認證的原理解析 1、常見的認證方式 2、Basic基礎認證原理 三、Basic基礎認證的代碼示例 1、登錄過程 2、/Home/I

C#--WebApi異常處理機制

str with 分配 客戶 來看 stack 統一 releases 全局配置 其實對於C#異常處理大家都不陌生,但是對於在WeiApi上的異常處理實際上也和傳統異常處理區別不大,但是卻經過封裝可以讓異常更加友好,https://docs

c#(6)—— 網絡通信基礎知識

pro erb sin ase nic param row mmu res 1、HttpClient 類 (1)、HttpClient 類 用於發送HTTP 請求,接收請求的響應。 (2)、HttpClient 類 派生於 HttpMessageInvoker類,此基類負責

《iOS開發書籍目錄

archive 憑證 修改 工具 core serial 第二部分 破解 uilabel 第一部分:iOS開發工具 第二部分:iOS開發實踐 第10章 理解內存管理 10.1 引用計數 10.1.1 什麽是引用計數,原理是什麽 10.1.2 我們為什麽需要引用計數 10

C++之一

C++ lamnda 在實際工作中,發現大學C++教科書上的C++知識還不夠用,或者理解不夠深,為此這方面還得沖沖電。下面是簡單整理了以前不太熟悉的幾個點。 1. 構造和拷貝函數l 賦值構造函數:T(T &)l 賦值拷貝函數: operator = (T &)l

C#系列——WebApi 接口參數不再困惑:傳參詳解

pub 博客 bapi write ids 簡單 指定 數組 這也 https://www.cnblogs.com/landeanfen/p/5337072.html 閱讀目錄 一、get請求 1、基礎類型參數 2、實體作為參數 3、數組作為參數 4

C#學習筆記—個人整理

直接 描述 關鍵字 重載 類名 pri 聯系 sys 第三章 學習筆記 第一章: 一、回顧數組 1、變量 : 只能存儲一個數據 2、數組 :存儲固定大小的相同類型的數據 3、對象 : 存儲多個相同/不同類型的數據 4、集合 : 特殊的容器,存儲N個相同/不同類型的數據

安卓入門到推薦書籍整理pdf附網盤連結已拿阿里豆瓣offer(珍藏)

轉載自某大佬部落格:https://pymlovelyq.github.io/2018/09/04/An/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好

python從入門到推薦書籍最全整理pdf分享附網盤連結已拿BT豆瓣offer

從八月底開始找工作,短短的一星期多一些,面試了9家公司,拿到5份Offer,可能是因為我所面試的公司都是些創業性的公司吧,不過還是感觸良多,因為學習Python的時間還很短,沒想到還算比較容易的找到了工作,就把自己找的python資源和大家分享一下,希望為學習Python找工作的小夥

Java程式設計師從入門到技術書籍推薦十個系列最全50+本附閱讀技術書方法論(珍藏版)

轉載自某大佬部落格:https://pymlovelyq.github.io/2018/10/26/java/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特