1.object與class:在object-oriented programming編程領(lǐng)域,對象(object)有更嚴格的定義。對象是由數(shù)據(jù)結(jié)構(gòu)和用于處理該結(jié)構(gòu)的過程(稱為methods)組成的實體(instance)。這些方法由對象接收的消息激活。一個對象的內(nèi)部數(shù)據(jù)結(jié)構(gòu)與其他對象完全隔離(此屬性稱為“encapsulation”)。對象是基于模板生成的。從某個模板生成的實體(instance)的集合稱為類。有一個重要的屬性叫做繼承,它允許在現(xiàn)有類上構(gòu)建新的類,繼承現(xiàn)有類的全部或部分特性,并允許擴展新特性。有些系統(tǒng)甚至實現(xiàn)了多重繼承,允許一個類從多個父類繼承。如果你還是沒有懂,那么只要建立這樣一個概念就行了,Object就是個“東西”,是“東西”就得占空間,在計算機中就得占一定內(nèi)存,所以我們稱他為實體(instance)。上述相檔部份在描述“東西”的產(chǎn)生,它說“東西是模板產(chǎn)生的”,其實這模板(template)就是“東西”的屬性描述,也就是類(class)。需要注意的是class是一種屬性的描述,而并非實體,根據(jù)class產(chǎn)生的object才是實體。
2.instantiation:產(chǎn)生object的過程我們稱之為實例化(instantiation),根據(jù)object class(或者template)產(chǎn)生一個實體的過程就是instantiation。
3.object-oriented programming:面向?qū)ο缶幊淌且环N編程方式,它使用“對象”作為程序的基本功能單元。程序員會花費很多精力來描述對象的屬性,包括它們的數(shù)據(jù)和行為(處理數(shù)據(jù)的方法),并使用“類”的語法來展示他們的設(shè)計。當(dāng)程序開始運行時,根據(jù)設(shè)計好的類,會創(chuàng)建出實際的對象。這些對象會相互合作,共同實現(xiàn)程序的功能。此外,像int、float、long這樣的語言內(nèi)置類型也可以看作是一種類,它們用于描述數(shù)據(jù)的性質(zhì),但通常沒有相關(guān)的處理程序。
int i; // i 是 一 個 int object. float f; // f 是一個 float object.
?
4.object與class的關(guān)系:現(xiàn)在讓我們以一個實例說明一下object與class的關(guān)系,假設(shè)我們的class設(shè)計如下:
1 //CStroke描述線條應(yīng)有的特征 2 3 class CStroke 4 { 5 //CStroke的行為 6 public: 7 void DrawStroke( /*....*/ ){ }; //畫線條 8 void Serialize( /*....*/ ){ }; //檔案調(diào)用 9 10 //CStroke的數(shù)據(jù) 11 protected: 12 vector<Point*>m_Array; //存儲線條坐標(biāo) 13 int m_penColor;//筆的顏色 14 int m_penWidth;//筆的寬度 15 int m_penStyle;//筆的樣式 16 };
于是每當(dāng)使用者在屏幕上畫一線條(stoke),計算機便有程序中產(chǎn)生一個CStroke object,其中有一個array準(zhǔn)備用來存儲線條上各點的坐標(biāo),以及三個int變量分別代表筆的顏色、寬度、樣式。我們必肌設(shè)計一些UIQ函數(shù),讓使用者能夠以滑動鼠標(biāo)來代替畫筆,直接在屏幕上輸出構(gòu)成線條的每一個點坐標(biāo),以下圖為例,程序產(chǎn)生了8個CStroke object。
?5. class的聲明和實現(xiàn)(?Declaration?&?Implementation):下面是 C++ class 的聲明形式(declaration),通常放在 .h?文件中:
1 class CPoint{ 2 public: 3 CPoint(float x=0.0) :_x(x){} 4 5 float x(){return _x;} 6 7 void x(float xval ){_x=xval;} 8 9 protected: 10 float _x; // data member 11 12 13 };
class內(nèi)含有兩種東西:一個是data member(例如上面的_x),一個是menber functions(例如上述的CPoint()以及兩個x())。上例的三個member functions都直接在class中完成了實現(xiàn),所以自動成為一個inline函數(shù)。通常是函數(shù)比較簡單的我們才會這樣做,如果函數(shù)比較復(fù)雜的,我們會在class declaration 中完成member functions的聲明,而在.cpp文件中完成實現(xiàn)的部分(implementation)例如:文章來源:http://www.zghlxwxcb.cn/news/detail-856810.html
1 //in hello.h 2 3 class CPoint{ 4 public: 5 CPoint(float x=0.0) :_x(x){} 6 7 float x(); //只是member function的聲明 8 9 void x(float xval );//只是member function的聲明 10 11 protected: 12 float _x; // data member 13 14 15 };
1 //in hello.cpp 2 #include "hello.h" 3 4 float CPoint::x(){return _x;} //實現(xiàn)內(nèi)容 5 void CPoint::x(float xval ){_x=xval;} //實現(xiàn)內(nèi)容
6.符號命名習(xí)慣(?Naming?Convention):有一種常見的符號命名習(xí)慣是在class名稱前面加上“C”,在data members名稱前面加上"m_",至于member functions,并沒有什么常見的命名習(xí)慣。文章來源地址http://www.zghlxwxcb.cn/news/detail-856810.html
到了這里,關(guān)于C++ 多態(tài)與虛擬:Class 語法語義的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!