c 基本知識梳理(1)

2021-07-07 05:23:20 字數 3817 閱讀 7327

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 可讀字元,可...