程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺析C++對象模型問題

淺析C++對象模型問題

編輯:C++入門知識

在C++編程過程中,Class類型一旦被定義,它的實例對象就能被創建,並初始化,且能定義指針變量指向它,換句話說實例化的類就是對象,好了,下面就隨本文帶大家進入C++對象模型的知識海洋吧。

C++對象模型的思維方式解決問題,對於對C語言已經很熟悉的人來說會很不能適應。需要一段時間來適應,不然會將代碼寫的似是而非。而且不能邯鄲學步,必須從思想上徹底的C++OO),如果只是依葫蘆畫瓢,那結果很可能是用C++的語法編寫C式的程序。

本人曾經犯的典型的低級的錯誤之一,就是無意識的一個類無限制的擴充,完全沒有考慮到類的多層結構基類-派生類),需要屬性或方法便在類中增加,雖然也用到了多態、重載等一些OO的設計方式,但最後這個類龐大無比,除了在當前系統中任勞任怨的工作外,一點復用的可能都沒有,如果另一個系統還需要一個類似的東西,那只能重新設計實現一個新的類。

並且最致命的是在維護更新時帶來得麻煩,需要不斷全部編譯不說,而且代碼在用了大量注釋後,在過一段時間讀起來也是一件重腦力勞動。及失去了C的簡潔清晰和高效,也不完全具備C++的面向對象的特性。

這根本不能叫C++程序。我想有時間重寫一下以前代碼也會有很多收獲,溫故而知新嗎)C和C++在編程思想上是相互矛盾的。這也就是說如果你想學C++,完全可以不學C,只需要一本好書和一個不太笨的大腦再加上努力就可以了,如果你已有C的經驗在一定的情況下反而會搗亂。

  • C++Test怎樣自動生成樁函數
  • 怎麼更好的設計C++棧對象
  • C++語法總結之談
  • 總結C++詞法分析設計方法
  • 淺析C++程序監視Windows事件日志

本章是對對象模型的一個大略浏覽。既然我們選擇了C++對象模型而不是C作為開發工具,那我們的編程思想也應該轉為C++的,而不能再延續C的Procedural方式。我們必須學會C++的思考方式。采用抽象數據類型或用一個多層的class體系對數據以及數據處理函數進行封裝,只有擺脫C程序的使用全局數據的慣性,才能充分發揮出C++對象模型的強大威力。

在C++中有兩種數據成員static和nonstatic,以及三種成員函數static、nonstatic和virtual。C++對象模型對內存空間和存取時間做了優化,nonstatic的數據成員被置於類對象之內,而static數據成員被置於類對象之外。

static和nonstatic成員函數被放在類對象之外。而virtual函數是由類對象的一個指向vtbl虛函數表)的指針vptr來進行支持。而vptr的設定和重置由類的構造函數、析構函數以及copy assignment運算符自動完成。

我們設計的每一個類幾乎都要有一個或多個構造函數、析構函數和一個Assignment運算符。他們的作用是構造函數產生一個新的對象並確定它被初始化。析構函數銷毀一個對象並確定它已經被適當的清理避免出現內存洩露的問題),Assignment運算符給對象一個新值。

這是第一章的第一部分,由於雷神最近幾天在做模式小組的主頁,時間周轉不開了。本想寫完整個一章再發,考慮一下還是先發一部分吧。原因有2。1、第一章的後半部可能又要拖上10天半個月的。

筆記實在難寫,我不願意將筆記做成將書上的重點再抄一邊,而是喜歡盡量將自己的理解描述出來,誰知第一章便如此的難以消化,已經反復讀了3遍,還是有些夾生。所以本著對大家和自己負責的態度,雷神准備再看它3遍在說。突然發現自己的C++還差的很遠,好可怕呀。

簡單的對象模型 :

  1. Class Point   
  2. {   
  3. public:   
  4. Point(float xval); //1   
  5. virtual ~Point(); //2   
  6.  
  7. float x() const; //3   
  8. static int PointCount(); //4   
  9. protected:   
  10. virtual ostream& print(ostream &os) const; //5   
  11. float _x; //6   
  12. static int _point_count; //7   
  13. }  

當構造對象時便會有一個類似指針數組的東西存放著類數據成員在內存中位置的指針,還有指向成員函數的指針。為了對一個類產生的所有對象實體有一個標准的表達,所以對象模型采用了表格,把所有的數據成員放在數據成員表中,把所有的成員函數的地址放在了成員函數表中,而類對象本身有指向這兩個表的指針。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved