原创 【十二】初探繼承

1、繼承概念 面向對象中的繼承指類之間的父子關係 子類擁有父類的所有成員變量和成員函數 子類就是一種特殊的父類 子類對象可以當作父類對象使用 子類可以擁有父類沒有的方法和屬性 示例: class Parent { privat

原创 【網絡】(七)五種I/O模型--I/O複用 Select(一)

1、五種I/O模型 五種I/O模型分別是: 阻塞I/O 非阻塞I/O I/O複用(select/poll) 信號驅動I/O 異步I/O 0.1 阻塞I/O 連接完成,我們通常使用recv函數讀取數據,如果此時沒有數據,那麼該

原创 【網絡】(三)流協議粘包問題

  在第二篇中,談到了流協議的粘包問題以及一種解決方法的實現,在數據的開始顯示的指明數據的長度;這是一種不錯的解決方法,另外,也有說到可以根據數據中的特殊字符來判斷是否接收完了一整條消息,本篇將在上一篇的基礎上實現這一方法! 原理

原创 【十六】函數模板

1、引入泛型編程 在以前C語言中,如果一個函數要處理不同的數據類型,那麼需要爲每種數據類型都定義一個函數實行,例如下面的函數: void Swap(int& a, int& b) { int temp = a; a = b

原创 【十五】繼承與多態(下)

1、重載和重寫 思考: 重載和重寫有什麼區別?什麼時候是重載,什麼時候是重寫? 函數重載 必須在同一個類中進行 子類無法重載父類的函數,父類同名函數將被覆蓋 重載是在編譯期間根據參數類型和個數決定調用函數 函數重寫 必鬚髮生

原创 【十八】類模板(下)

本篇接着上一篇的內容介紹! 1、類模板多個類型參數 和函數模板一樣,一個類模板也可以定義多個類型參數! 如下: #include <iostream> using namespace std; template <typena

原创 【十七】類模板(上)

1、引入類模板 C++中可以將模板的思想應用於類,使得類可以不關注具體操作的數據類型,而只關注類所需要實現的功能。 C++中的類模板 提供一種特殊的類以相同的行爲處理不同的類型 在類聲明前使用template進行標識 < typ

原创 【網絡】(一)Socket 簡介

1、什麼是socket? socket可以看成是用戶進程與內核網絡協議棧的編程接口。 socket不僅可以用於本機的進程間通信,還可以用於網絡上不同主機的進程間通信!     2、IPv4套接字地址結構 通常也被稱爲

原创 【十九】一些實際工程中的問題

1、Bug 在實際工程中內存操作是bug的重要來源 C++將堆內存交由開發人員自由使用,因此 未及時釋放,將產生內存泄漏 重複釋放同一段內存,行爲未知 使用越界,操作了不屬於自己的內存 思考: 怎樣最大限度的避開上述的使用

原创 【網絡】(五)避免殭屍進程

前面的四篇文章中,對於殭屍進程都只做了簡單的處理,我忽略了子進程退出時發送給父進程的SIGCHLD信號,本篇文章來詳細談論一下殭屍進程! 1、爲什麼會有殭屍進程? 當父進程fork出的子進程運行結束後,爲了父進程還能夠獲得子進程的

原创 【網絡】(九)close與shutdown

1、兩者的區別 close函數會終止數據傳送的兩個方向,包括套接口的讀取和寫入; shutdown函數可以有選擇的終止某個方向的數據傳送,或者終止兩個方向; shutdown函數的how參數如果爲SHUT_RDWR,表示關閉了套

原创 【十】類的靜態成員

1、類的靜態成員 在C++中可以定義靜態成員變量和靜態成員函數 靜態成員屬於整個類所有,不需要依賴任何對象,會在全局數據區分配空間 靜態成員可以是public、private和protected的 可以在類外,通過類名或者對象名

原创 【網絡】(八)I/O複用--Select(二)

第七篇文章中簡介了幾種IO模型,也使用select函數改進客戶端的代碼,本篇文章用它來改進一下服務端代碼! 用select函數實現的服務器程序,叫做併發服務器,它還是在排隊處理任務,無法並行處理這些事件! 1、select事件發生

原创 【網絡】(四)網絡相關函數使用簡介

1、getsockname 用於獲取自己的ip和端口 使用舉例: struct sockaddr_in localaddr; socklen_t len = sizeof(localaddr); memse

原创 【十三】繼承中的構造與析構

1、賦值兼容性原則 子類對象可以當作父類對象使用 子類對象可以直接賦值給父類對象 子類對象可以直接初始化父類對象 父類指針可以直接指向子類對象 父類引用可以直接引用子類對象 所以,在上一篇文章中說: 子類是就是特殊的父類!!