韌館-LearnHouse

[C/C++]類別宣告並產生一般物件與物件指標的差別?

以前在討論區裡常常看到有人說,兩三天或一個禮拜就K懂XXX語言

有時候都覺得他們很神,但實際工作後發現,其實應該都是被環境逼出來的

最近TRACE前端商家的Toolkit程式,由於是寫成COM元件,而我以前也沒寫過COM的經驗

一開始當然摸不著頭緒與架構用法,但經過我兩天all day的study,終於搞懂大致上的概念與撰寫方式

也許別人看起來好像也沒有什麼難的,但幾天前我真的拿一本COM的書,從底層一步一步keyin程式碼,練習如何建立COM與如何呼叫使用

練習到最後才發現原來有好用的ATL Wizard可以用來建立COM元件

建立方式可以參考我的論壇記事本(兩個地方的文章都是蒐集網路上的資訊,皆非作者本人撰寫)

不過今天寫這篇其實是要講一個觀念,也許對很多老手一樣會覺得這不是本來就應該要懂得

但我覺得對於新手剛接觸C++物件導向,可能會在這個地方產生puzzle,我就是了 = ="

以前在研所寫視訊串流的時候,有用到,但沒仔細去想它的差別

我隨便舉個例子:

class  Car{
private:
  int number;
  float price;
public:
  void get_number();
  void get_price();
};

在許多書上宣告完類別後,會直接用Car porsche;來宣告物件,使用porsche.number或porsche.get_number()的方式來存取member與method

可是有在TRACE大專案code的人會發現,上述的用法很少見,看到的幾乎都是用指標來建立物件,並使用「->」的方式來存取,如下:

Car *porsche;

porsche = new Car;

porsche->number;

porsche->get_number();

兩種方法都可以,但其主要的差別是

一般物件在建立時是靜態的,所需之記憶體在編譯時就已經配置好,直到程式結束前仍保有該處之記憶體。

若用物件指標建立時是動態的,建立時才取得記憶體,用完後歸還,不但不會佔用空間也可達到資源回收之目的。

2011年10 月 posted by admin in 程式&軟體 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: