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