C Builder 初學問與答(十八)

2021-04-02 15:44:49 字數 2663 閱讀 8898

**、摘錄

11

)在

cb中聽說有動態陣列之說,我想問什麼是動態陣列?

答:動態陣列(

dynamicarray

)是cb

中引起的,它可以動態地改變陣列長度,並且象一般陣列那樣易於使用。

dynamicarray

可以說是

vcl中的乙個重大的革新。

12

)動態陣列是如何實現與應用的呢?

答:動態陣列是以類的方式實現的。

cb提供了

dynamicarray

類模板,使用這個類模板可以宣告實際動態陣列。使用下面的語法:

dynamicarrayarrayname;

其中type

為動態陣列的資料型別,動態陣列支援任何型別的資料、物件,甚至是乙個動態陣列物件。例如可以這樣宣告乙個動態陣列:

dynamicarray>aarray;

這相當於宣告了乙個二維動態陣列。

動態資料具有乙個

length

屬性,通過這個屬性可以設定或獲得陣列的長度。例如:

dynamicarrayintarray;

intarray.length=10;

showmessage(「arraylength:」+inttostr(intarray.length));

若是要釋放乙個動態陣列,應該將該陣列的

length

屬性設為0。

動態陣列有

low和

high

兩個屬性,分別表示動態陣列的起始下標和中止下標。起始下標總是為

0,而中止下標總是等於

length-1

。動態陣列實現了「

=」操作符,可以複製整個陣列到另乙個陣列。同時,動態陣列還提供了

copy

和copyrange

方法,copyrange

方法可以複製指定範圍的資料。

13

vcl物件在堆中與在棧中建立是不是都可以?

答:vcl

物件只能在堆中建立,在棧裡不可以的。

棧是存放函式的所有動態區域性變數及函式呼叫和返回的有關資訊的一塊記憶體。棧的記憶體管理嚴格遵循先進後出的順序,這一點正是實現函式呼叫所需要的。從棧中分配記憶體效率特別高。資料物件使用棧中的記憶體(如動態區域性變數)比使用堆中記憶體會使程式執行更快。

堆提供了

malloc()

、calloc()

、realloc()

和new

等函式獲取記憶體空間的一塊記憶體。從堆中獲取記憶體比從棧中要慢得多,但堆的記憶體管理卻比棧靈活得多,任何時候你都可以從堆中獲取(或釋放)記憶體,我們可以按任意順序進行。用來存放遞迴資料結構的記憶體幾乎都要從堆中獲取。用來存放字串的記憶體通常也從堆中獲取,尤其是對那些在程式執行時可能出現的很長的字串。

從堆中獲取的記憶體要用

free()

、delete

來釋放,它本身不會自動釋放。

由於object pascal

中所有的物件都只能建構於堆中,無法和

c++一樣,能夠在棧(在函式內建立類的物件)、資料區段(在函式外建立類的物件)、堆(用

new等函式來建立類的物件)三種地方建立物件,所以

vcl類的物件我們只能在堆中建立。

如建立乙個按鈕物件,我們可以這樣來建立:

tbutton *btnmy= new tbutton(null)

;可以寫成如下程式:類名

*物件名

=new

類名();

()裡面可以是你已建立的該類物件實體的名字,工程的名字,或

null

14

)問:dynamic_cast

是用來做什麼的?

答:dynamic_cast

可以把某種物件強制轉成另乙個類,這裡所謂的強制仍有其侷限,也就是說,如果類轉不過來,那麼系統將不會進行轉換操作的。若型別轉換無法成功則返回乙個值是

0的指標。若引數

t是乙個參考型別,而類的轉換又失敗了,系統將會丟出乙個異常處理資訊:

bad_cast

。但你放心這不會導致系統宕機,所以可以放心使用。其程式:

dynamic_cast (ptr)

t

引數一定要是乙個指標、

void*

、或是已經定義過的類,而

ptr引數則必須是乙個指標(

pointer

)或是乙個引用(

reference

)。如果

t的型別是

void*

,那麼ptr

則是乙個可以訪問最下面類裡的任何成員,當然這樣的類將不可以是基礎類。

(未完待續)

C Builder初學問與答1

一直以來都想寫一點為bcb初學者快速入門的東西,前不久寫了幾篇 閒談bcb 想把自己學習bcb中如何來解決難點的方法說給大家,沒想到被罵得不成樣子。本想不寫了,但覺得這些東西留下來能做什麼呢?還是用另一種方法來重新演譯我的思維吧,最近有些忙,那幾篇沒有寫完的文章,我也會盡快寫完的,至於 深入qr 我...

C Builder初學問與答3

21 問 在進行 windows 程式介面設計中,經常會用到按鈕,在 c builder 中,按鈕一定是通過按鈕元件來實現的嗎?答 是的,並且 c builder 的按鈕類元件十分豐富。bcb 提供了兩類按鈕類元件 一類是執行類按鈕,另一類是資訊類按鈕。所謂執行類按鈕是指它們通常用來啟動程式執行的,...

C Builder初學問與答8

8.圖形類元件 59 問 windows是乙個圖形系統,c builder是怎樣處理圖形的呢?答 c builder通過提供圖形元件來處理圖形,其中比較常用的有影象元件 image 幾何圖形元件 shape 和畫板元件 paintbox 前兩個元件位於additional頁中,畫板元件位於syste...