1、c++和標準c++:包含完整系統類庫是標準c++在97年完善,
90年代初,帶有語言標準,不含有標準類庫,而且各種功能在不同種逐漸推出。
vc++和g++以及其他的c++編譯器必須符合語言標準。
無論vc++公升級到什麼版本,語言標準不一定公升級。
2、標準類庫主要包含
string/
list
vector
map只要是標準c++的編譯器,無論是vc++還是g++以及c++ builder(bcb)等都要支援以上類庫。
在linux g++上 mfc的類庫不支援,mfc類庫只限於在vc++種使用。
3、c++語言比c語言在一些**書寫上更加方便和簡介,例如:
a)c++函式內變數的定義可以在語句之後,而c語言則變數必須定義在函式內所有語句的上方;
b)c語言定義結構體物件(指標)時必須帶關鍵字,而c++不用帶關鍵字.
1、bool型變數:1個位元組變數(和char一樣大小)
預設賦值為true(1)或者false(0)
a)引用型變數必須初始化,引用變數必須掛在乙個現有的同型別變數上;
c)引用變數與**變數任何乙個數值變化則另乙個一定變;
d)引用型變數做引數,經常是用來代替**變數賦值或者取值(替身);
引用型變數的原理實際上就是指標變數,被障眼法看成是兩個替身變數;
引用的優點是書寫更加流暢,使**的邏輯更加清晰!!
3、命名空間:
a)當工程**量龐大時,由大量程式設計師編寫的**出現了重名函式,重名全域性變數
b)使用using namespace std;語句在每處呼叫空間內的函式不用加網域名稱控制
例如:std::cout << aa;
c)定義域(::):以後會在類成員函式中常用。
4、c++輸入輸出:
推薦使用#include
using namespace std;
不推薦使用#include
cout 和cin代替printf和scanf功能更強,自動識別輸入輸出的型別。
(不需要指定%d和%s等等)
5、c++支援過載函式,c語言不可以有名字相同的函式;
過載函式:函式名字相同但是引數列表不同(型別和個數不完全相同)
遞迴函式:c語言和c++都支援。
6、申請堆空間:
new和delete代替malloc和free,是書寫更加流暢,尤其申請堆內陣列更直觀。
例如://
stest *p = (stest*)malloc(sizeof(stest));
stest *p = new stest;
//free(p);
delete p;
//int * p1 = (int*)malloc(sizeof(int)*5);
int *p1 = new int[5];
delete p1;//不推薦刪除陣列時,delete p1;
注意:new 的錯誤寫法:int* p1 = new int(5);
7、c++由結構體struct公升級為類class
結構體或者類內不但支援成員變數,還支援成員函式,是乙個更加嚴重的障眼法,
任何乙個類的成員函式內部都隱藏形式引數乙個變數叫this
8、內聯擴充套件是用來消除函式呼叫時的時間和空間開銷。它通常用於頻繁執行的函式。
乙個小記憶體空間的函式非常受益。如果程式設計師沒有指定內聯函式,編譯器可以決定哪些函式內聯 。
內連函式inline
代替:c語言的巨集定義函式,實際也是c++的障眼法之一。
編譯時仍然按巨集定義函式一樣處理的。
成員函式的原理:
1、當一些函式與某乙個結構體(類)的成員變數運算關係非常緊密,
c++把這樣的一些函式劃分到這個類的內部,叫做成員函式。
2、成員函式內部必須有個本結構體(類)的指標變數(this),
這個指標變數指向哪個本結構體(類)的物件就這個函式就將操作那個結構體(類)內的成員變數。
3、最終達到的效果就是乙個類不但有成員變數(屬性)而且還有一些相關的行為(功能)。
這個效果就是物件導向的開發。
2、建構函式(constructor):
建構函式就是代替了c語言的大括號對本類物件的成員資料進行初始化的函式。
a)建構函式是類的一種特殊成員函式,一般情況下,建構函式是專門用於初始化對成員變數的
,所以最好不要在建構函式中進行與物件的初始化無關的操作。
b)建構函式的函式名一定與類的名稱完全相同,而且沒有返回值
(不是說返回值是void或者int,而是說不允許指定返回值)。
c)建構函式的返回值如果指定了任何型別都是錯誤,建構函式的功能是代替c語言對結構體物件初始化的大括號。
d)c語言對結構體成員初始化方式是使用大括號,如果該類(結構體)有建構函式就禁止使用大括號初始化成員資料。
3、構造函式呼叫,
a)是在定義物件時指定引數或者不指定引數,都系統自動呼叫對應的建構函式。手工使用物件呼叫建構函式出錯。
b)建構函式分為無引數,有引數和拷貝建構函式。定義了哪形式的建構函式,就意味著類有哪種物件定義方式。
c)使用=符號來呼叫建構函式,呼叫單引數的建構函式而且單引數型別和=符號右邊的型別相同。
d)一般情況下=符號右邊的型別沒有適合單引數建構函式就不能使用=符號構造
e)只有一種型別不需要適合=符號右邊建構函式。系統內部有預設的拷貝建構函式,內部實現的是整體賦值。
(還有乙個預設是operator=)
4、拷貝建構函式:拷貝建構函式是特殊的構造,主要是用乙個已有物件整體初始化新的物件。
a)標準拷貝建構函式:類名(const 類名& 物件)
b)非標準拷貝建構函式:類名(類名& 物件)
5、析構函式(destructors)
a)析構函式可以手工呼叫但不推薦手工呼叫,主要是物件的生命期結束時,會自動呼叫析構函式。
b)析構函式名是在類名前加"~",析構函式同樣不能返回任何值,也必須沒有函式引數,並且不能被過載.
c)所以乙個類可以有多個建構函式,卻只能有一析構函式。
d)一般說來,每當建立乙個物件時就呼叫物件的建構函式;每當撤消乙個物件就呼叫該物件的析構函式。
注意:new 的錯誤寫法:int p1 = new int(5);
內聯擴充套件是用來消除函式呼叫時的時間開銷。它通常用於頻繁執行的函式。 乙個小記憶體空間的函式非常受益。
如果沒有內聯函式,編譯器可以決定哪些函式內聯 。
物件導向的三個基本特徵是:封裝、繼承、多型。
1、封裝(成員函式的原理):是物件導向的特徵之一,是類和物件概念的主要特性。
封裝就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。
2、繼承(派生類的原理):物件導向程式設計 (oop) 語言的乙個主要功能就是「繼承」。
繼承是指現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。
通過繼承建立的新類稱為「子類」或「派生類」。 被繼承的類稱為「基類」、「父類」或「超類」。 繼承的過程,就是從一般到特殊的過程。
例如:文科學生資訊(歷史,政治,地理等成績)是還包含通用學生資訊。
理科學生資訊(物理、化學、生物等成績)是還包含通用學生資訊,
因此這兩個類都可以繼承 通用student 類(姓名、性別和年齡等)。
3、多型(虛函式的原理):
封裝可以隱藏實現細節,使得**模組化;繼承可以擴充套件已存在的**模組(類);它們的目的都是為了——**重用。而多型則是為了實現另乙個目的——介面重用!例如:乙個排序函式可以按多種規則進行排序。
又如:每個圖形類都有繪圖的介面,呼叫cline類的繪圖函式畫出的是一條線,呼叫cellipse類畫出的是乙個橢圓等等。
(整理自呂鑫老師c++教程)
區塊鏈基本知識梳理
公鑰 私鑰 與位址 公鏈 私鏈 聯盟鏈 主要區別 公有鏈向所有人開放,聯盟鏈向授權的組織或機構開放,私有鏈向滿足特定條件的個人開放 比如只對本公司的人開放 開放程度 出塊節點 效率共識演算法 典型代表 公鏈完全開放 任何節點 低pow pos dpos等 位元幣 以太坊 eos 私鏈不開放 針對個人...
C 基本知識整理(1)
在c 程式設計中using namespace std 這條語句很常見,其中,namespace就是命名空間,而using是宣告,std是命名空間名。命名空間就是為了解決c 中函式變數的命名衝突所採取的一種措施,能夠解決多模組協同開發出現變數函式命名的衝突問題。1 using宣告及作用域 using...
C 學習(1)(基本知識)
第一節課,兩個簡單的題,一些零散的知識點 一 讀入 相關部落格 1.cin 遇到空格,回車會停下 2.cin.getline s,n 接收n 1個字元到s中,包括空格 屬於istream流 3.getline cin,s 讀字串到s 屬於string流,注意標頭檔案 4.cin.get 可讀字元,可...