Time of Update: 2018-12-05
根據《C++ Primer》第三版16.4節的敘述,C++類模板友元分為以下幾種情況1.非模板友元類或友元函數。 書上給了一個例子:class Foo{ void bar();};template <class T>class QueueItem{ friend class foobar; friend void foo(); friend void Foo::bar();
Time of Update: 2018-12-05
一、用模板實現單例模式在前面的文章中,用過多種方法實現單例模式,現在用模板方式來實現:Singleton.h: C++
Time of Update: 2018-12-05
回顧前面的文章,實現了一個簡單原廠模式來建立不同類對象,但由於c++沒有類似new "Circle"之類的文法,導致CreateShape 函數中需要不斷地ifelse地去判斷,如果有多個不同類對象需要建立,顯然這是很費神的,下面通過宏定義註冊的方法來實現動態創建對象。Shape.h: C++ Code 123456789101112131415161718192021222324252627282930313233#ifndef _SHAPE_H_#define _SHAPE_H_class
Time of Update: 2018-12-05
一、STL簡介(一)、泛型程式設計泛型程式設計(generic programming)將程式寫得儘可能通用將演算法從資料結構中抽象出來,成為通用的C++的模板為泛型程式設計奠定了關鍵的基礎(二)、什麼是STL1、STL(Standard Template
Time of Update: 2018-12-05
一、演算法演算法是以函數模板的形式實現的。常用的演算法涉及到比較、交換、尋找、搜尋、複製、修改、移除、反轉、排序、合并等等。演算法並非容器類型的成員函數,而是一些全域函數,要與迭代器一起搭配使用。演算法的優勢在於只需實作一份,可以適應所有的容器,不必為每一種容器量訂製。也可以與使用者定義的容器搭配。演算法尾詞:_if比如find(按某個值來尋找),find_if(按某個條件來尋找)_copy這個尾詞用來表示在演算法中,元素不光被操作,還會被複製到目標區間。比如reverse、reverse_co
Time of Update: 2018-12-05
一、不能自動繼承的成員函數建構函式(包括拷貝建構函式)解構函式=運算子二、繼承與建構函式基類的建構函式不被繼承,衍生類別中需要聲明自己的建構函式。聲明建構函式時,只需要對本類中新增成員進行初始化,對繼承來的基類成員的初始化調用基類建構函式完成(如果沒有給出則預設調用預設建構函式)。衍生類別的建構函式需要給基類的建構函式傳遞參數 C++ Code 1234567891011121314151617181920212223242526272829303132333435363738394041424
Time of Update: 2018-12-05
一、標準庫的map類型使用map得包含map類所在的標頭檔 template < class Key, class Type, class Traits = less<Key>, class Allocator=allocator<pair <const Key, Type> > >class map#include <map> 定義一個map對象: map<string, int> mapTest;/
Time of Update: 2018-12-05
先來看看C標準I/O庫函數是如何用系統調用實現的。 fopen(3) 調用open(2)開啟指定的檔案,返回一個檔案描述符(就是一個int 類型的編號),分配一 個FILE 結構體,其中包含該檔案的描述符、I/O緩衝區和當前讀寫位置等資訊,返回這 個FILE 結構體的地址。 fgetc(3) 通過傳入的FILE *參數找到該檔案的描述符、I/O緩衝區和當前讀寫位置,判斷能否從I/O緩衝 區中讀到下一個字元,如果能讀到就直接返回該字元,否則調用read(2),把檔案描述符傳進
Time of Update: 2018-12-05
1.C標準庫的I/O緩衝區 UNIX的傳統 是Everything is a file,鍵盤、顯示器、串口、磁碟等裝置在/dev 目錄下都有一個特殊的裝置檔案與之對應,這些裝置檔案也可以像普通檔案(儲存在磁碟上的檔案)一樣開啟、讀、寫和關閉,使用的函數介面是相同的。使用者程式調用C標準I/O庫函數讀寫普通檔案或裝置,而這些庫函數要通過系統調用把讀寫請求傳給核心
Time of Update: 2018-12-05
一、IO、流資料的輸入和輸出(input/output簡寫為I/O)對標準輸入裝置和標準輸出裝置的輸入輸出簡稱為標準I/O對在外存磁碟上檔案的輸入輸出簡稱為檔案I/O對記憶體中指定的字串儲存空間的輸入輸出簡稱為串I/O資料輸入輸出的過程,可以形象地看成流從流中擷取資料的操作稱為“提取”(輸入)操作向流中添加資料的操作稱為“插入”(輸出)操作標準輸入輸出資料流檔案流字串流二、流類庫繼承體系、四個輸入輸出對象流庫具有兩個平行的基類、向緩衝:streambuf 和 ios
Time of Update: 2018-12-05
一、基於TCP協議的網路程式是基於TCP協議的用戶端/伺服器程式的一般流程:伺服器調用socket()、bind()、listen()完成初始化後,調用accept()阻塞等待,處於監聽連接埠的狀態,用戶端調用socket()初始化後,調用connect()發出SYN段並阻塞等待伺服器應答,伺服器應答一個SYN-ACK段,用戶端收到後從connect()返回,同時應答一個ACK段,伺服器收到後從accept()返回。資料轉送的過程:建立串連後,TCP協議提供全雙工系統的通訊服務,但是一般的用戶端
Time of Update: 2018-12-05
一、繼承C++很重要的一個特徵就是代碼重用。在C語言中重用代碼的方式就是拷貝代碼、修改代碼。C++可以用繼承或組合的方式來重用。通過組合或繼承現有的的類來建立新類,而不是重新建立它們。繼承是使用已經編寫好的類來建立新類,新的類具有原有類的所有屬性和操作,也可以在原有類的基礎上作一些修改和增補。新類稱為衍生類別或子類,原有類稱為基類或父類衍生類別是基類的具體化(一)、衍生類別的聲明文法為:class 衍生類別名 : 繼承方式 基類名{ 衍生類別新增成員的聲明;}(二)、公有/
Time of Update: 2018-12-05
彙編:1.對於51單片機:RLC A;即將累加器ACC中內容左移1位,最低位被CY原始值替代,最高位移入進位標誌CY 中,同理還有RRC A。 具體使用:MOV A,#0FFH; CLR C; RLC A;2.對於8086:(1)左移:SHL/SAL DST CNT 移位時運算元的最低位將移入0,最高位移入CF中,若左移若干位,則CF中只保留最後一次移出的內容。(2)
Time of Update: 2018-12-05
一、RTTIRun-time type information (RTTI) is a mechanism that allows the type of an object to be determined during program execution.There are three main C++ language elements to run-time type information:The dynamic_cast operator. Used for conversion
Time of Update: 2018-12-05
we have four specific castingoperators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed between angle-brackets (<>) and immediately after, the expression to be converted between
Time of Update: 2018-12-05
一、++運算子多載前置++運算子多載成員函數的方式重載,原型為:函數類型 & operator++();友元函數的方式重載,原型為:friend 函數類型 & operator++(類類型 &);後置++運算子多載成員函數的方式重載,原型為:函數類型 operator++(int);友元函數的方式重載,原型為:friend 函數類型 operator++(類類型 &, int); C++ Code 1234567891011121314151617181920
Time of Update: 2018-12-05
一、引用(1)、引用是給一個變數起別名定義引用的一般格式:類型 &引用名 = 變數名;例如:int a=1; int &b=a;// b是a的別名,因此a和b是同一個單元注意:定義引用時一定要初始化,指明該引用變數是誰的別名在實際應用中,引用一般用作參數傳遞與傳回值引用不是變數,引用僅僅只是變數的別名,引用沒有自己獨立的空間,引用要與它所引用的變數共用空間,對引用所做的改變實際上是對它所引用的變數的改變,引用在定義的時候要進行初始化,引用一經初始化,不能重新指向其他變數。(
Time of Update: 2018-12-05
C語言中可變參數的宏 __VA_ARGS__ 1.#假如希望在字串中包含宏參數,ANSI C允許這樣作,在類函數宏的替換部分,#符號用作一個預先處理運算子,它可以把語言符號轉化成字串。 例如,如果x是一個宏參量,那麼#x可以把參數名轉化成相應的字串。該過程稱為字串化(stringizing).#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x)) int main(void){
Time of Update: 2018-12-05
變數聲明的標準格式儲存類型 資料類型 變數名。例如:static int I =5;(每個變數至少包括儲存類型和資料類型。)注意:在學習詳細之前最好先看下關鍵字,無論是學習IT技術還是學習語言等其他知識。學習的過程就是深刻理解關鍵字的過程。如果對以下關鍵字都深刻理解就不用看下文。(上學更改成關鍵字學也不為過。關鍵字學好了就是合格的。)1:int、double、float、char、void、char。2:auto、extern、static、register。一、變數的三大特點:變數的資料類型:
Time of Update: 2018-12-05
常見的不不能聲明為虛函數的有:普通函數(非成員函數);靜態成員函數;內聯成員函數;建構函式;友元函數。1.為什麼C++不支援普通函數為虛函數?普通函數(非成員函數)只能被overload,不能被override,聲明為虛函數也沒有什麼意思,因此編譯器會在編譯時間邦定函數。多態的運行期行為體現在虛函數上,虛函數通過繼承方式來體現出多態作用,頂層函數不屬於成員函數,是不能被繼承的2.為什麼C++不支援建構函式為虛函數?這個原因很簡單,主要是從語義上考慮,所以不支援。因為建構函式本來就是為了明確初始化