/*
達內學習 C++ day50 2013-11-12
*/
一,成員指針
a,成員變量指針 指向類的成員變量的指針
成員變量的類型 類::*ptr;
ptr = &類::成員變量
類型 對象;
對象.*ptr; 對象指針->*ptr;;
成員變量指針的本質 指針在對象內的偏移量
b,成員函數指針
void show(int a);
void (類名::*pshow)(int a);
去掉變量名就是類型,類型是分開的則,變量名用括號
pshow = &類名::函數名;
類名 對象名;
(對象名.*pshow)();
二,this 指針
成員函數中 誰調用 this指針指向誰
三,運算符重載
1,什麼是運算符重載
函數的特殊表現形式
2,二元運算符重載
L#R
a,去L對象對應的類型中找一個函數
operator#(R類類型)
b,沒有成員函數 則去全局找
operator#(L類類型,R類類型);
3, 輸入輸出運算符
(不一定往屏幕上輸出)
流對象 不能拷貝 也不能加const修改
cout<<R;
a,去流對象中找一個成員函數
ostream& operator<<(R對象類型);
b,全局找
ostream& operator<<(ostream& os,const R對象類型)
friend ostream& operator<<(ostream& os,R對象類型)
4,一元操作符
#R
a,去R類型中着一個成員函數
operator#()
b,獲取去全局找
operator#(R)
四,運算符重載的限制
1,不是所有的運算符都能重載
:: 作用域運算符
. 取成員
.* 成員指針運算符
?:三目運算符
sizeof 類型大小
typeid 類型信息運算符
2,不能對基本類型的數據進行重載
運算符重載中 至少有一個類型是類類型
3,不能改變運算符規則
4,不能發明新的運算符
5,只能是成員的運算符
= [] () -> *
賦值運算符是編譯器唯一提供的運算符,默認是把一個對象中的內容逐字節拷貝,默認是淺拷貝
a,構造函數中分配堆內存
b,析構函數中釋放內存
c,拷貝構造函數 防止淺拷貝
()運算符,
()函數對象,把一個對象像函數一樣使用,簡稱爲函數對象
類型 operator()(參數列表);
() 處理類型轉換
operator 轉換成的類型();
-> *
把一個不是指針的類型當作指針使用
new delete 運算符重載
void* operator new(size_t size);
void operator delete(void* ptr);
如果一個類中有一個單參的構造函數,則系統允許把一個單參的類型變量轉換成
Integer(int data =0):data(data){}
Integer i = 10;
如果不希望可以轉換在 構造函數前加 explicit
//====================================================
面向對象的特徵:
抽象,封裝,繼承,多態,
1,封裝
不該讓調用者知道就私有化 讓調用者知道的公開化
目的:隱藏細節
類 這個類只能得到一個實例
(單例模式)
A& a=A::getInstance();
私有構造 私有構造函數
提供一個公開接口
static A& getInstance();
好處:
1,便於協同開發
2,防止不必要的擴展