C++学习札记(2011-09-30)
最新文章:Virson's Blog
1、對象由屬性(Attribute)和服務(Service)兩部分組成
2、對象的屬性值只應由這個對象的服務來讀取和修改
3、具有相似屬性和行為的一組對象,成為類(Class)
4、在已有類的基礎上通過增加新的特性而派生出新的類,稱作繼承;原有類稱作一般類或基類,新建立的類則稱為特殊類或派生類
5、繼承意味著“自動擁有”或“隱含地復制”,即在定義新類時,只要將新類說明為某個一般類的特殊類,它就會自動的、隱含的擁有這個一般類的全部屬性和服務;在特殊類中,這些屬性和服務可以直接使用而不必重新定義
6、通過消息在對象之間進行通信是面向?qū)ο蟮囊粋€基本原則
7、多態(tài)性的定義是:同一操作作用于不同的類的實例,將產(chǎn)生不同的執(zhí)行結(jié)果,即不同類的對象收到相同的消息時,得到不同的結(jié)果。
8、多態(tài)性包含編譯時的多態(tài)性、運行時的多態(tài)性兩大類。即:多態(tài)性也分為靜態(tài)多態(tài)性和動態(tài)多態(tài)性兩種
9、靜態(tài)多態(tài)性是指定義在一個類或函數(shù)中的同名函數(shù),它們根據(jù)參數(shù)表(類型以及個數(shù))區(qū)別語義,并通過靜態(tài)聯(lián)編實現(xiàn),例如,在一個類中定義的不同參數(shù)的構(gòu)造函數(shù)
10、動態(tài)多態(tài)性是指定義在一個類層次的不同類中的重載函數(shù),它們一般具有相同的函數(shù),因此要根據(jù)指針指向的對象所在類來區(qū)別語義,它通過動態(tài)聯(lián)編實現(xiàn),例,在用戶不作任何干預的情況下,類的成員函數(shù)的行為能根據(jù)調(diào)用它的對象類型自動作出適應性調(diào)整,而且調(diào)整是發(fā)生在程序運行時,這就是程序的動態(tài)多態(tài)性,即,發(fā)出同樣的消息被不同類型的對象接收時,有可能導致完全不同的行為
11、程序設計多態(tài)性的示例
多態(tài)性就是多種表現(xiàn)形式,具體來說,可以用"一個對外接口,多個內(nèi)在實現(xiàn)方法"表示。舉一個例子,計算機中的堆棧可以存儲各種格式的數(shù)據(jù),包括整型,浮點或字符。不管存儲的是何種數(shù)據(jù),堆棧的算法實現(xiàn)是一樣的。針對不同的數(shù)據(jù)類型,編程人員不必手工選擇,只需使用統(tǒng)一接口名,系統(tǒng)可自動選擇。
舉例子說明一下:
#include <iostream.h> class A { public: virtual void test() { cout<<"aaa"<<endl; } //運行時的多態(tài)性,如果不加virtual就是編譯時的多態(tài) //void test() { cout<<"aaa"<<endl; }//編譯時的多態(tài)性 }; class B:public A { public: void test() {cout<<"bbb"<<endl;} }; class C:public B { public: void test() {cout<<"ccc"<<endl;} }; void main() { C cc; A *p=&cc; p->test(); } 在Class A的test函數(shù)前加上virtual,即在運行時多態(tài)的時候,程序輸出結(jié)果為:ccc 在Class A的test函數(shù)前不加virtual,即在編譯時多態(tài)的時候,程序輸出結(jié)果為:aaa C++的多態(tài)性:在的函數(shù)前面加上Virtual關鍵字,在派生類中重寫該函數(shù),運行時將會根據(jù)對象的實際類型來調(diào)用相應的函數(shù)。如果對象類型是派生類,就調(diào)用派生類的函數(shù);如果對象類型是基類,就調(diào)用基類的函數(shù)。12、私有成員只能被該類的成員函數(shù)所訪問,從類外不能直接訪問類的私有成員;公有成員是類的訪問接口,從類外可以直接訪問類的公有成員;保護成員的訪問控制權(quán)限介于私有成員與公有成員之間,在該類的派生類中可以直接訪問其基類的保護成員
13、動態(tài)聯(lián)編
動態(tài)聯(lián)編又稱動態(tài)關聯(lián) 定義: 編譯程序在編譯階段并不能確切知道將要調(diào)用的函數(shù),只有在程序執(zhí)行時才能確定將要調(diào)用的函數(shù),為此要確切知道該調(diào)用的函數(shù),要求聯(lián)編工作要在程序運行時進行,這種在程序運行時進行聯(lián)編工作被稱為動態(tài)聯(lián)編。 動態(tài)聯(lián)編必須包括以下方面: 成員函數(shù)必須聲明為virtual 如果基類中聲明了為虛函數(shù),則派生類中不必再聲明。 調(diào)用方式: 通過對象的指針或引用調(diào)用成員函數(shù);或通過成員函數(shù)調(diào)用,反之就無法實現(xiàn)動態(tài)聯(lián)編。 例如: #include <iostream> using namespace std; const float pi=3.14159; class circle1 { public: virtual float area( ) //把area聲明為虛函數(shù) { radius=2.5; return pi*radius*radius; } private: float radius; }; class circle2:public circle1 { public: float area( ) { radius=5.5; return pi*radius*radius; } private: float radius; }; void main() { while(true) { cout<<"請輸入1或2.\n"; int choise; cin>>choise; circle1 *p; //定義一個類circle1的指針變量p switch(choise) { case 1:p=new circle1; break; case 2:p=new circle2; break; default:break; } cout<<"the area of the circle"<<choise<<" "<<p->area()<<endl; } } 14、動態(tài)聯(lián)編是實現(xiàn)多態(tài)性的一種重要形式 15、在C++中消息傳遞是通過成員函數(shù)調(diào)用來實現(xiàn)的 16、C++允許友元從類外直接訪問類的私有成員 17、靜態(tài)聯(lián)編 靜態(tài)聯(lián)編是指聯(lián)編工作出現(xiàn)在編譯連接階段,這種聯(lián)編又稱早期聯(lián)編,它解決了程序中的操作調(diào)用與執(zhí)行該操作代碼間的關系。 靜態(tài)聯(lián)編 靜態(tài)聯(lián)編含義: 在編譯時所進行的這種聯(lián)編又稱靜態(tài)束定,在編譯時就解決了程序中的操作調(diào)用與執(zhí)行該操作代碼間的關系。 例7.3.1 一個靜態(tài)聯(lián)編的例子。 #include<iostream.h> class point{ private: float x, y; public: void setPoint(float I, float j) { x=I; y=j; } float area( ) { return 0;} }; const float pi=3.14159; class circle:public point { private: float radius; public: void setRadius( float r) { radius =r; } float area( ) { return pi*radius*radius;} }; void mian() { point p; float a=p.area();//調(diào)用point類的成員函數(shù) cout<<"the area of the point p is"<<a<<endl; circle c; c.setRadius(2.5); a=c.area(); //調(diào)用circle類的成員函數(shù) cout<<"the area of the circle c is"<<a<<endl; } 程序結(jié)果為: the area of the point p is 0 the area of the circle c is 19.634937 18、#include是一條預處理命令,功能是要求編譯器在對程序進行預處理時,將其后的文件的代碼嵌入到程序中 19、cout是系統(tǒng)預定義的一個標準輸出設備,一般代表顯示器 20、cin是系統(tǒng)預定義的一個標準的輸入設備,一般代表鍵盤 21、c++中標識符是嚴格區(qū)分大小寫的,并且標識符只能由大/小寫字母,數(shù)字(0~9)和下劃線組成,并且第一個字符必須是字母或下劃線 22、代碼中的空白是空格、制表符(按Tab鍵產(chǎn)生的字符)、換行符(按Enter鍵產(chǎn)生的字符)和注釋的總稱,空白在編譯的時候會被忽略 23、在用C++語言編寫好源程序后,還需要進行編輯、編譯、連接和運行四個步驟;“編輯”后保存成*.cpp文件,“編譯”后產(chǎn)生二進制目標文件*.obj;“連接”(把目標文件和其他分別編譯生成的目標代碼模塊(如果有的話)以及系統(tǒng)提供的標準庫函數(shù)連接在一起,生成可直接運行的可執(zhí)行文件)后產(chǎn)生可執(zhí)行文件;“運行”可執(zhí)行文件總結(jié)
以上是生活随笔為你收集整理的C++学习札记(2011-09-30)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java基本功】一文读懂String及
- 下一篇: springmvc拦截器无法拦截jsp