這篇日誌還是先從一個能夠運行起來的例子出發,一旦能順利的看到程式的成功運行,那麼接下來的事件我想應該是問為什麼了。似乎這樣更加容易理解和掌握。 對於socket程式的概念這裡就不多寫了,但我相信,如果能看完這整篇文章,我相信不會再有這樣的疑問的。 下面將編寫一個c/s結構的程式,主要功能是client將向server發送一些訊息,而當server收到client的請求時,並向client發送一條回應資訊。 server.c代碼如下: #include <stdio .h>
原文參考書籍:《Design Patterns Explained Simply》 一、定義 根據儲存的原型尋找需建立對象的類型,再通過拷貝(clone)依據類型建立新的對象。 二、結構 三、要點 原型模式中,Client並不知道要複製對象的實際類型,只需知道基類類型即可。 複製對象比直接建立對象的優點在於,複製是將原有對象的行為屬性帶到了新的對象中。 C++沒有複製方法,要複製一個對象,需要藉助拷貝建構函式(Copy
c++的四個部分: c語言 物件導向的c++ 模板c++ STL 開發環境和類庫: Qt MFC wxWidgets cocos2d(遊戲引擎) c語言的資料類型包括基本類型,構造類型以及指標類型。
我先把結論列出來: 當成員變數和形參是指標,最好不要使用:成員變數(形參)這樣的形式。因為你可以不是進行:成員變數 = 形參這個方向的賦值,你可能是執行:形參 = 成員變數這個方向的賦值。因為前提,它們都是指標嘛。 今天我遇到了這樣的一個錯誤: 下面的程式,編譯是正常通過的,但是運行卻不行。(我只是將相關的代碼貼了出來) class PclView{public: PclView(pcl::visualization::PCLVisualizer * &p);
多態的作用:繼承是子類使用父類的方法,而多態則是父類使用子類的方法。 在C++中,多態有兩種,一種是函數重載,一種是虛函數。函數重載發生在編譯的時候,它的函數參數是不一樣的。而虛函數是發生在啟動並執行時候,它的函數原型是一樣的,依靠的是指標的指向。 有一篇非常好的文章介紹多態與虛函數。發一個連結在這裡。 http://blog.csdn.net/augusdi/article/details/38271009 這麼一大堆名詞,實際上就圍繞一件事展開,就是多態,
寫c++代碼會經常使用標準C的東西,兩者攙和起來使用中難免出現類型不符,需要轉換,之前經常使用sprintf 將char* 類型轉換為string類型 後來遇到string類型向char *類型轉換,查了一下資料,使用c_str函數,格式為: string s="1234"; const char *c = s.c_str(); 需要注意的是,c_str() 傳回值為const char *類型的。 例子:
1、列印最長輸入行 問題及代碼: /*列印最長輸入行*/#include <stdio.h>#define MAXLINE 100int getline(char line[],int maxline); void copy(char to[],char from[]);int main(){int len; //當前行長度 int max; //目前為止發現的最行的長度 char line[MAXLINE]; //當前的輸入行 char
關於命名空的自訂方法,可見參考資料[1],關於Qt Creator根據*.ui檔案產生的ui_xxx.h中的宏QT_BEGIN_NAMESPACE和QT_ENG_NAMESPACE的定義,可見參考資料[3]。下面解析ui_xxx.h檔案中最後面的以下內容的含義: namespace Ui { class MainWindow: public Ui_MainWindow {};} // namespace Ui
# include<stdio.h>int main(){char ch1[100];char ch2[100];printf("Please input a string:\n"); gets(ch1);int i,j=0;int a=0,k=0,m=0,n=0,b=0,x=0;for(i=0;i<=sizeof(ch1);i++){
前言 大家都應該知道C++的精髓是虛函數吧? 虛函數帶來的好處就是: 可以定義一個基類的指標, 其指向一個繼承類, 當通過基類的指標去調用函數時, 可以在運行時決定該調用基類的函數還是繼承類的函數. 虛函數是實現多態(動態綁定)/介面函數的基礎. 可以說: 沒有虛函數, C++將變得一無是處! 既然是C++的精髓, 那麼我們有必要瞭解一下她的實現方式嗎? 有必要! 既然C++是從C語言的基礎上發展而來的, 那麼我們可以嘗試用c語言來類比實現嗎? 有可能! 接下來,
2008年07月28日 22:22:02 關於嵌入開發中ARM的C代碼最佳化 下面是網路上收集關於ARM的C代碼最佳化方法,在嵌入開發中應該有用: [聲明:以下方法非本人發現和總結,均為有心之人無私貢獻,謝謝他們的勞動與分享。] ======================================================= C資料類型 1.
本文出自:http://c.biancheng.net/cpp/html/2857.html 我們知道,C程式開發並編譯完成後,要載入記憶體(主存或記憶體條)才能運行(請查看: 載入記憶體,讓程式運行起來),變數名、函數名都會對應記憶體中的一塊地區。 記憶體中運行著很多程式,我們的程式只佔用一部分空間,這部分空間又可以細分為以下的地區: 記憶體分區 說明
一個非常簡單的情形 非侵入的版本 可序列化的成員 衍生類別 指標 數組 STL容器 類的版本 把serialize拆分成save/load 檔案 輸出檔案(archive)類似於輸出資料流(stream)。資料能通過<< 或 & 操作符儲存到檔案(archive)中: ar << data; ar & data; 輸入檔案(archive)類似於輸入資料流(stream)。資料能通過>> 或
友元 友元 英文 friend。friend 翻譯成中文就是朋友,翻譯成術語就是:友元。朋友就很好理解了,我的錢你隨便花,我的東西你隨便用;當然我也是你的朋友,你的錢我隨便花,你的東西我隨便用。 當然在 C++ 裡,類與類 之間可以作為友元,那麼這個類就可以去操作另外一個類裡面私人的成員;函數與函數 之間也可以作為 友元,所以友元分為: 友元函數 和 友元類。 我們通過一個例子一看就明白了: 寫代碼 #include <iostream>#include <
在C++中,vector是一個十分有用的容器,下面根據多篇文章對這個vector做一下總結。 1.檔案包含 首先在程式開頭處加上#include以包含所需要的類檔案vector,還有一定要加上using namespace std; #include <vector>using namespace std; 2.變數聲明 例2.1: 聲明一個int向量以替代一維的數組: vector
本文出自:http://m.blog.csdn.net/cyh183269855/article/details/53760816 c++容器 C++中的容器大致可以分為兩個大類:順序容器和關聯容器。順序容器中有包含有順序容器適配器。 順序容器:將單一類型元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素。主要有vector、list、deque(雙端隊列)。順序容器適配器:stack、queue和priority_queue。
C++的delete以及operator delete重載。 朝花 剛學習c++的時候就學過在c++中delete/new其實都是一個方法,我們執行delete p其實就是調用了方法operator delete(p); 當然,還學過delete/new有全域的和局部的(類中的),我們可以重載他們,讓delete和new按照我們想要的樣子去執行對象的建立和銷毀。 在過去這麼多年中,我一直認堅定的認為我們代碼中的delete p,等價於 operator
按址傳遞中,引用形參是實參變數的一個引用,前邊也講過,引用只是相當於一個別名,系統不會再為其分配儲存空間,所以此時,函數中改變形參後,實參值也會相應改變。按值傳遞只是將實參的值傳遞給形參變數,參與運算,因為是在不同的儲存單元,所以實參值不會受影響。 值傳遞(按值傳遞) 1.實參值傳遞給相應形參 2.實參地址傳遞給相應形參 比如:數組、指標。
上一篇已經分析了基本結構體、C++簡單對象和加上一般的繼承之後的各種情況,這篇文章將主要在有虛繼承時,C++對象的記憶體又是怎樣分配的。 虛繼承 虛繼承解決了從不同途徑繼承的類具有共同基類的問題,使得共同基類只有一份拷貝。解決了二義性的問題,也節省了記憶體。 虛繼承的一般類圖如下所示: sizeof(Derived) = 40 位元組。經過分析,可以得到Derived類在記憶體中的儲存結構示意圖為: 總結: 各部分在記憶體中的存放順序為先父類、後子類、
利用C++實現外掛程式系統 外掛程式機制能夠方便地擴充已有應用程式的功能。用C++實現外掛程式機制的基本思路是:應用程式提供介面,由使用者或第三方實現這些介面,並編譯出相應的動態連結程式庫(即外掛程式);將所有外掛程式放到某個特定目錄,應用程式運行時會自動搜尋該目錄,並動態載入目錄中的外掛程式。 應用程式提供介面 為了實現功能擴充,應用程式必須向外掛程式提供介面。在base.h中定義一個抽象類別Base作為介面: #ifndef BASE_H_#define