C++支持面向對象的編程,同時兼容C語言的面向過程編程
VB是一門基於對象語言,有對象和類的概念,但是對於繼承、多態實現的不好
VC可以看成是C++加上MFC基礎類庫的組合
1 必須在定義引用的時候就聲明引用對象
2 不能更該引用對象
3 不能引用數字,常量,表達式
函數引用返回不能引用局部變量
指針:可以隨意指向不同的地址(水性楊花)
引用:聲明後不能引用其它變量(從一而終)
不能改變常量引用的值
可以改變常量指針的值,但是不能改變常量指針的指向
缺省參數可以看作是函數重載的特例,Java中取消了缺省參數。
應用:缺省參數可以涵蓋普通應用和特殊應用,但如果要更靈活的處理,需要函數重載
不是,有可能存在二義性
不是,整型的引用也是整型
用途:節省調用函數的開銷,加快運行速度
不一定,編譯器會自動優化
類外實現方法,引用類的靜態成員等
1 靜態成員可以不經實例化直接引用
2 靜態屬性可以有初始值
3 靜態方法中只能訪問靜態成員
4 靜態成員一般描述對象的共同特徵"
連鎖店是一個類,店名屬性應該是靜態(班級班費)
構造函數用來初始化屬性,爲指針分配內存空間,析構函數用來釋放分配的空間
1 new/delete是C++標準函數,效率高
2 new自動獲得分配的size,使用方便
3 new/delete會引發構造/析構函數
int *p = new int[100];
delete [] p;
當類中包含指針屬性時,淺複製只複製地址,深層複製則複製內容
class MyCout {
public:
MyCout & operator <<(int a) {
printf(""%d"", a);
return *this;
}
}
就是try, catch模型"
C++的異常處理區分了正常代碼和異常處理代碼,並且在拋出用戶自定義異常方面更加完善
單一繼承,多重繼承,層級繼承,多極繼承
實例化D的對象d,可以用d.A::abc()或d.B::abc()引用A中的方法,d.C::abc()引用C中的方法
private的成員不會被繼承
A()-->B()-->C()-->D()-->~D()-->~C()-->~B()-->~A()
因爲子類在實例化的時候回收先調用父類中沒有參數的構造函數(除非子類中聲明調用父類中帶參數的),這是因爲父類中存在構造函數,編
Override:函數覆蓋,發生在父類和子類中,子類覆蓋函數和父類的源函數聲明必須完全一致
Overload:函數重載,重載的一組函數必須具有各自不同的參數
是單向的,可以將子類對象賦給父類對象,也可以讓父類指針指向子類,但是不能反過來
可以實現代碼重用
代碼重用的三個階段:
1 複製 缺點:代碼分散
2 模塊化 缺點:不易維護,擴充
3 繼承"
不能,除非將父類中的方法聲明成virtual
注意:不能通過父類指針調用子類中特有的方法
區別:純虛函數一般沒有實現
應用:父類中有必要實現該方法,考慮到多態可以用虛函數,如果父類中沒有必要實現該方法,但是期望在子類中實現,可以使用純虛函數
區別:抽象類不能實例化對象,抽象類的子類一定要覆蓋父類中的純虛函數
應用:類一般用來描述現實中存在的對象,抽象類用來描述現實中不存在的概念。比如抽象類“形狀”和類“圓”"
子類如果不覆蓋父類中的純虛函數子類不能實例化對象,也變成了抽象類,虛函數子類可以不覆蓋
虛析構函數可以保證子類中的析構函數能被調用