21天學通C 閱讀筆記3

2021-06-28 19:58:47 字數 3340 閱讀 8921

陣列

陣列是資料存放位址的集合,每個位址儲存相同型別的資料。

int intarray[10];//int

型別為4

個位元組,編譯器會分配

4*10

個位元組的連續記憶體給該陣列

陣列初始化

int intarray[2];

//一維陣列宣告

int intarray[2] = ;

//對兩個元素都賦值

int intarray[2] = ;

//只對第乙個元素賦值,第二個預設為0

int intarray = ;

//不指定陣列大小,根據初始值設定大小

*** xarray[2];

//需有不帶引數的預設建構函式,否則

xarray

陣列的元素為空,即不能建立物件

int xarray[2][3];

//二維陣列宣告

int xarray[2][3] = //對

2*3個元素進行初始化

int xarray[2][3] = ,...}

//用大括號對初始值分組

陣列記憶體

堆疊記憶體是有限的,而自由儲存區的記憶體則大很多,所以在自由儲存區宣告物件

1.*** ***[50];//

物件陣列 2.

棧中儲存陣列,堆中儲存物件

*** ****[50];//

陣列存放在堆疊中,陣列存放指向物件的指標,指標陣列

*** *x;

for(i<50;..)

3.堆中儲存陣列和物件

*** **** = new ***[50];//

陣列指標,指向物件陣列的指標,該物件陣列同1定義

銷毀:delete ***;///

銷毀陣列,如果

delete ***;

則為銷毀陣列中的第乙個物件

字元陣列

char carray = "hello world!";//

編譯器自動增加空字元

charcbuff[20];

cin>>cbuff;

cin.get(cbuff,19);

注:cin

輸入字串時,遇到空格或換行則停止向緩衝區寫入,而且當定義的緩衝區大小小於輸入字元數時會溢位寫入。

get方法會讀取固定長度的字元到緩衝區,不會造成以上兩種情況。

字元陣列複製

charcarray = "hello world!";

charcbuff[20];

strcpy(cbuff,carray);

strncpy(cbuff,carray, 19);

strcpy(desstr, srcstr);//

字元陣列複製,如果長度

srcstr>desstr,

則會溢位寫入

strncpy(desstr, srcstr, maxlen);//

將srcstr

空字元\0

之前的字元或者前

maxlen

個字元複製到

desstr 鍊錶

不良的陣列大小定義會造成空間浪費或分配不足等問題

採用鍊錶動態分配所需要的儲存空間

每個節點定義指向下乙個節點的指標

單一繼承

classb:public a

classc:public a

需要建立物件,既能執行

b::methodb

,又能執行

c::methodc 1.

上公升:methodb

和methodc

均提公升到

a中,但會破壞類的封裝性,增加類

a的複雜度 2.

下降:rtti(runtime type identification,

執行型別鑑定

),eg:

為呼叫methodc

方法下降c類

classb

classc:public b

b objb =new b;

b objc =new c;

c objt1 = dynamic_castobjb;  //為空

c objt2 = dynamic_castobjc;  //

不為空,正常

c類物件,可呼叫

methodc方法

注:不建議使用此種方式,應採用虛函式、模板或多重繼承來實現。

多重繼承

class c :public a,b

構造函式呼叫:

a,b,c

析構函式呼叫:

c,b,a

class a

class b

或者class a :d

class b :d

a,b由於繼承自同乙個類或者定義了同名方法

methodcomm時,c

中需顯式指出呼叫的是哪乙個類的方法。

objc->a::mehtodcomm();

或者,c

類覆蓋methodcomm

方法。

第二種情況,在初始化

c類物件時,構造函式呼叫:

d,a,d,b,c

,此時,有兩個

d類副本 即:

a->d ; b->d ; c->a,b

虛繼承一般類的建構函式只初始化位元組的變數和基類,但虛繼承的基類是個例外,該基類由派生性最強的類初始化。

class d

class a :virtual public d

class b :virtual public d

class c :public a, b注:a

,b,c

必須在它們的建構函式中初始化

d,但當初始化c時,

a,b初始化將被忽略。 c

物件呼叫

methodcomm

時,不必再明確

methodcomm

為哪乙個基類的方法

注:不建議使用多重繼承,一是許多編譯器不支援多重繼承,二是增加**的複雜度

混合繼承

單一繼承與多重繼承之間的一種折中方式,

classc:public a,b

其中,a

為正常類,

b類為混合繼承類(功能類),該類沒有貨只有很少的資料。

抽象資料型別(虛基類)

含有純虛函式的類為抽象資料型別(

adt),例項化該型別是非法的。

其他類繼承該類時,必須覆蓋所有純虛函式,否則也為抽象資料型別。

純虛函式:

virtual void method() = 0;

注:一般情況下,

adt作為介面宣告使用,不對純虛函式進行實現。

規則:對所有子類必須實現的函式設為純虛函式。

21天學通C 閱讀筆記6(模板 標準模板庫)

模板類 通過將型別作為引數來建立新的例項。eg.template class 表示模板的引數是型別,t表示引數化型別 class classa template voidclassa methoda t t classaintobj intobj.methoda 2 模板類友元 1.非模板友元類或函...

21天學通C語言 學習筆記(4)

本章將重點介紹c語言提供的三組基本資料型別的使用,包括 整型 字元型和浮點型。c語言的其他高階資料型別實質上都可以視為這些基本資料型別的組合。通過本章的學習,要掌握以下知識 c語言定義了4種整型資料型別以表示不同大小的整數數值。本節將介紹各種整型資料型別的位元組長度 整型常量和整型變數的使用,以及使...

21天學通C語言 學習筆記(7)

為了處理更複雜的資料,c語言還定義了一些功能更強大的復合資料型別,如陣列型別 結構體型別 共用體型別和列舉型別。陣列是同一資料型別的許多資料元素按某種順序排列在一起的集合,通過訪問陣列名和索引就可以訪問陣列中的任意元素。本節將重點學習一下內容 一維陣列是c語言中用來儲存和處理一維序列資料的資料型別。...