Time of Update: 2017-01-18
何為C++物件模型?C++物件模型可以概括為以下2部分: 1. 語言中直接支援物件導向程式設計的部分 2. 對於各種支援的底層實現機制引言現在有一個Point類,聲明如下:class Point { public: Point(float xval); virtual ~Point(); float x() const; static int PointCount(); protected:
Time of Update: 2017-01-18
首先看下面一端代碼:複製代碼 代碼如下: #include <iostream> void swap( int &a,int &b) { int temp; temp=a; a=b; b=temp; } int main(int
Time of Update: 2017-01-18
如果你覺得重新編譯檔案的時間很短或者時間長一點無所謂,反正需要重新編譯,那麼你也可以選擇略過此文,不過也建議瀏覽。如果你想學習或者關心這塊內容,那麼此文必定會給你帶來收穫。首先我不給出依存關係的定義,我給出一個例子。複製代碼 代碼如下: class Peopel{ public: People(const std::string & name,const Date& brithday,Image Img)
Time of Update: 2017-01-18
1、最好不要使用引用傳回值有同學在傳遞的參數的時候使用引用方式傳遞,避免了臨時對象的建立,提高了效率,那麼在傳回值的時候能不能使用引用呢?看如下代碼複製代碼 代碼如下: class Rational{
Time of Update: 2017-01-18
下面詳細介紹 一、初始化與初始賦值 首先說說類的初始化與初始賦值之前的區別,這也許裡面可能有我們不知道的事情。 其實類初始化與初始賦值還是有區別的。 複製代碼 代碼如下: class People{ public: People(std::string name,int age,int height); private: std::string m_sName; int m_iAge; int m_iHeight; } //賦值 People::People(std::string
Time of Update: 2017-01-18
1.盡量用類的非成員函數以及友元函數替換類的成員函數 例如一個類來類比人People 複製代碼 代碼如下: 1 class People{ 2 public: 3 ... 4 void Getup( ); 5 void Washing( ); 6 void eating( ); 7 ... 8 } 其實上面三個動作是早上“起床”、“洗簌”、“吃飯”三個常見的動作,如果現在用一個函數來表示使用成員函數即為 複製代碼 代碼如下:1 class People 2 { 3 ... 4 void
Time of Update: 2017-01-18
C++中的return語句是函數中一個重要的語句,return語句用於結束當前正在執行的函數,並將控制權返回給調用此函數的函數。return語句有兩種形式: return; return expression; 1、沒有傳回值的函數 不帶傳回值的return語句只能用於傳回型別為void的函數,return語句是為了引起函數的強制結束,這種用法類似於迴圈結構中的break語句的作用。 例子: 複製代碼 代碼如下: void swap(int &v1,int &v2) { if(v1==v2)
Time of Update: 2017-01-18
在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其是多。typedef與#define有些相似,其實是不同的,特別是在一些複雜的用法上,看了網上一些C/C++的學習者的部落格,其中有一篇關於typedef的總結還是很不錯,由於總結的很好,我就不加修改的引用過來了,加上自己的一個分析。基本定義: typedef為C語言的關鍵字,作用是為一種資料類型定義一個新名字。這裡的資料類型包括內部資料類型(int,char等)和自訂的資料類型(struct等)。
Time of Update: 2017-01-18
今天同學遇到一個在C語言中全域數組和局部數組的問題,卡了許久,我也沒有第一時間看出問題,現在把問題梳理一下,並給出解決方案。 問題描述: 在全域聲明的數組與在局部聲明的數組有著不同的效果。 首先來看一個程式: 複製代碼 代碼如下: #include <stdio.h> #include <stdlib.h> #define MAX 10 char a[MAX]; int main() { int i; char b[MAX]; char *c=(char
Time of Update: 2017-01-18
// ZipFile.h // #ifndef ZIPFILE_H #define ZIPFILE_H #include <string> #include <vector> #define ZIP_OK 0 #define ZIP_ERR_OPEN 1 #define ZIP_ERR_WRONG_FILE 2 #define ZIP_ERR_WRONG_HEADER 3 #define BYTE unsigned char #define ui32 unsigned
Time of Update: 2017-01-18
1、如何區分宏定義中的“宏名稱”和“宏字串”?對於帶參數的宏又該注意什嗎?在宏定義中,“宏名稱”和“宏字串”是通過“空格”來區分的。編譯器在處理時宏定義時,首先從“#define”後第一個空格開始讀取字串,直到遇見下一個空格為止,兩個空格之間的字串為“宏名稱”,確定好“宏名稱”之後,本行的所有其他字串都為“宏字串”。圖示:#define + N個空格(1 < N) + 宏名稱(中間沒有空格) + N個空格(1 < N) +
Time of Update: 2017-01-18
問題 C語言以及C++語言中的const究竟表示什嗎?其具體的實現機制又是如何?的呢? 本文將對這兩個問題進行一些分析,簡單解釋const的含義以及實現機制。 問題分析 簡單的說const在C語言中表示唯讀變數,而在C++語言中表示常量。關於const在C與C++語言中的使用以及更多的區別,以後有時間另開一貼說明。那麼const究竟是如何?的呢?
Time of Update: 2017-01-18
只有公用衍生類別才是基類真正的子類型,它完整地繼承了基類的功能。基類與衍生類別對象之間有賦值相容關係,由於衍生類別中包含從基類繼承的成員,因此可以將衍生類別的值賦給基類對象,在用到基類對象的時候可以用其子類對象代替。 具體表現在以下幾個方面: 衍生類別對象可以向基類對象賦值。 可以用子類(即公用衍生類別)對象對其基類對象賦值。如 A a1; //定義基類A對象a1 B b1; //定義類A的公用衍生類別B的對象b1 a1=b1; //用衍生類別B對象b1對基類對象a1賦值
Time of Update: 2017-01-18
這樣刪除會導致程式記憶體覆蓋等一系列不可預知的bug 複製代碼 代碼如下: map<string, string>::iterator iter; for ( iter = mm.begin();iter != mm.end(); iter ++ ) { if ( iter->second == something ) { mm.erase( iter ); } } 原因:當erase掉iter後,繼續執行iter++,這個時候就亂套了 正確方法: 複製代碼 代碼如下:
Time of Update: 2017-01-18
智能指標(smart pointer)是儲存指向動態分配(堆)對象指標的類,用於生存期控制,能夠確保自動正確的銷毀動態分配的對象,防止記憶體泄露。它的一種通用實現技術是使用引用計數(reference
Time of Update: 2017-01-18
到目前為止,看到的遞迴函式都是直接調用自己。雖然大多數的遞迴函式都符合這一形式,但其實遞迴的定義更為廣泛,如果某個函數被細分成了幾個子函數,那麼可以在更深的嵌套層次上應用遞迴調用。例如:如果函數 f 調用函數 g ,而函數 g 反過來又調用函數 f ,這些函數的調用仍然被看作是遞迴。這種類型的遞迴被成為互動遞迴 下面通過判斷一個數是偶數還是奇數來展示互動遞迴的應用,並且此題突出了遞迴跳躍的信任的重要性首先,先看奇數和偶數的描述: 如果一個數的前一個數是奇數,那麼該數是偶數
Time of Update: 2017-01-18
用位元運算實現加法也就是電腦用二進位進行運算,32位的CPU只能表示32位內的數,這裡先用1位元的加法來進行,在不考慮進位的基礎上,如下 複製代碼 代碼如下: 1 + 1 = 0 1 + 0 = 1 0 + 1 = 1 0 + 0 = 0 很明顯這幾個運算式可以用位元運算的“^”來代替,如下 複製代碼 代碼如下: 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0
Time of Update: 2017-01-18
最近在C++編程中經常遇到需要多位元組字元與寬位元組字元相互轉換的問題,一直自己貼那幾句代碼。覺得麻煩,於是就自己寫了一個類來封裝wchar_t與char類型間的轉換,其他的,諸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之間也是一樣用 複製代碼 代碼如下: #include <iostream> using namespace std; class CUser { public: CUser(); virtual~ CUser(); char*
Time of Update: 2017-01-18
在項目開發過程中,經常會使用到c++ 的url編碼和解碼,本文將以此問題詳細介紹提示,需要的朋友可以參考下複製代碼 代碼如下: #pragma once #include <iostream> #include <string> #include <windows.h> using namespace std; class strCoding { public: strCoding(void); ~strCoding(void); void
Time of Update: 2017-01-18
複製代碼 代碼如下: # include <vector> # include <iostream> # include <set> using namespace std; int main(int argc, char * argv[]) { vector<int> v; //找一些資料來測試 for (int i = 0; i < 50; i++) v.push_back(rand() % 25); for (int i = 0; i