原创 指針與內存管理初步

野指針: 1、什麼是野指針? 不指向任何合法對象的指針。 2、野指針產生的原因? 局部指針變量未被初始化。 使用已經釋放過後的指針。 指針所指向的變量在指向

原创 數組元素去重

問題:去除數組中重複的元素。 輸入: 2, 7, 3, 7, 2, 9, 9, 3 輸出: 2, 7, 3, 9 思路: 1、利用數組 準備一個額外空間的數組A,遍歷輸入數組中的元素,每個元素都去數組A中遍歷,A中存在則不管,

原创 遞歸實例求數組元素最大值

在用遞歸求解問題的時候,邊界條件重要,子過程的劃分一樣重要,子過程反映了求解問題思路。 將數組求最大值的問題劃分子過程,採用左右劃分。即將一個數組左右 「切成」兩半,求取左側最大值及右側最大值,再二者之間返回最大值即可,其中左側與右側再按

原创 繼承(Inheritance)與複合(Composition)關係下的構造與析構

這裏探究繼承與複合關係下的構造與析構次序,是看侯捷先生的C++留下的問題。 第一種關係: #include <iostream> using namespace std; class Base { public: B

原创 字符串操作之strstr()函數實現

strstr函數描述: #include <string.h> size_t strspn( const char *str1, const char *str2 ); strstr()函數用來檢索子串在字符串中首次出現的位置

原创 多態的現象及本質剖析(一)

多態的現象,同樣的調用語句有着不同的表現形態。 #include <iostream> using namespace std; class animal { public: virtual void func() = 0

原创 策略模式-Strategy Method(C++語言描述)

我們如何看待設計模式? 設計模式需要站在時間軸上來看待,需要看到未來。如果一個系統是靜態的,那我們也不需要設計模式,畢竟引入了某種設計模式之後,系統的複雜性以及可理解性就會大打折扣。 策略模式 在軟件設計的過程中,某些對象使用的算

原创 工廠設計模式-Factory Method(C++語言描述)

概述 我們在談設計模式的時候,需要結合具體的場景來談。沒有萬能的設計模式可以適應每一個業務場景,我們只有結合實際業務場景,抓住場景中的「變」和「不變」的主體才能更好地運用設計模式來設計出優良的代碼結構。 工廠設計模式屬於讓我們靈活

原创 拷貝構造函數應用場景分析

拷貝構造函數又叫複製構造函數,是一種特殊的構造函數,它由編譯器調用來完成一些基於同一類的其他對象的構建及初始化。有四個應用場景。 class AA { public: AA() //無參構造函數 默認構造函數 {

原创 Tempalate Method

在軟件構建過程中,對於某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由於固有的原因(比如框架與應用之間的關係)而無法和任務的整體結構同時實現。 如何在確定穩定操作結構的前提下,來靈活應對各個子步驟的

原创 C++操作符重載

爲什麼需要對操作符進行重載?對於編譯器提供的操作符,一般情況下,只支持基本數據類型和標準庫中提供的class,對於用戶自己定義的class,如果想支持基本操作,比如比較大小,判斷是否相等,等等,則需要用戶自己來定義關於這個操作符的

原创 多線程之生產者消費者模型

1、描述一下生產者消費者模型。 有n個生產者線程生產產品,m個消費者線程消費產品。在這裏他們需要互斥地訪問產品。 2、爲什麼要把產品數量設入臨界區,如何實現臨界區的(如何調用相關API)? 因爲如果在資源搶佔過程中,恢復現場時

原创 Qt客戶服務端傳輸數據總結

第一個小項目是關於Qt多線程與網絡傳輸的。 環境:VS2015+QT5.3(或者任意的其他版本的VS+QT組合) 要求:分別編寫一個客戶端和服務器端的程序,程序A作爲客戶端,程序B作爲服務器端,具體要求如下(期限3到5天時間)

原创 Makefile基礎學習(一)——從依賴到僞目標

一、初識Makefile make是一種用於項目編譯的應用程序,本質是一種腳本。而Makefile則是對make腳本的規則描述。 僅僅是寫腳本編譯項目的話shell腳本也是可以做的,用make的原因在於,make可以解析源文件之間

原创 進程間通信——管道

基於管道的進程間通信模型 爲了完成進程間通信,需要先建立管道。管道不屬於進程的資源而是和套接字一樣屬於操作系統。兩個進程通過操作系統提供的內存空間進行通信。 創建管道的API: #include <unistd.h> //成功返