【c++】查缺補漏
c++中new操作的返回值:
new返回一個指標,如int *p=new int;返回一個指向int的指標,int *p=new int[10],返回一個指向含有10個int元素的陣列的首地址。
new失敗的操作:
在早期c++版本中,如果系統不能夠滿足使用者new的記憶體需求,則繼承c語言的處理方法,返回一個指向NULL的指標;後來c++的版本中,則是跑出bad_alloc異常,所以針對兩種情況有三種處理方法:
① 老版本:
int *p=new int[100000000]
if(p==NULL){
//失敗處理
}
②新版本:
int *p;
try {
p=new int[100000000 ];
}catch(const std::bad_alloc& e){
//異常處理
}
③相容版本:
int *p=new (std::nothrow)int[100000000];
if(p==NULL){
//失敗處理
}
const在各個位置的作用
①const DATATYPE a=?;
DATATYPE型別的常量,const修飾資料型別DATATYPE,表示該修飾符的值不可修改。
②const DATATYPE *p;
一個常量指標,const修飾資料型別DATATYPE,表示該指標p指向的DATATYPE型別資料不可修改。
③DATATYPE const *p;
與②相同。
④DATATYPE* const p=a pointer;
一個指標常量,const修飾指標*,表示該指標是一個常量,它的值不能改變,也就是說它只能指向同一個地方,不能指向其他地方。
⑤const DATATYPE *const p=a pointer;
②和④的組合,表示一個常量指標常量,這種表示方法p的值不能修改,即只能指向一個位置,p指向的東西也不能修改。
⑥const int *functionName(….)
const修飾函式返回值的資料型別int,表示函式返回的指標指向的內容不能改變。
⑦const int *functionName(…)const;
函式名後有const的這種形式比較特殊,函式常量,只能出現在類中
第一個const修飾返回值得int,表示返回的指標指向的內容不能改變;第二個const修飾函式名,表示const成員函式,這種修飾限制了該函式的訪問許可權,它只有讀成員變數的許可權,沒有寫許可權。為什麼要這樣限制能,因為類可以例項化為一個常物件,常物件的值是不允許修改的(即常量),而常物件只能呼叫類的常量函式,所以常量函式不能修改類的內容,即不能有寫許可權。從另一個角度應該更好理解,類的get(獲取成員)的方法,應該有const和非const兩個版本,const版本是為const物件準備的,因為const物件只能訪問const成員函式。
友元函式
類具有封裝性,外部函式不能訪問類的私有成員,如果需要訪問類的私有成員,需要將函式在類內進行申明,格式較普通函式申明只是在前面加了friend關鍵字,友元函式不是類的成員函式,它只是一個普通的函式,但它可以訪問類的私有變數,訪問的類需要以引用的形式傳遞引數。
class foo{
public:
friend void bar(foo &a,foo &b,...);//類內申明bar為友元函式
//...other function
private:
//private element
};
void bar(foo &a,foo &b,...){
//函式定義,可以操作a,b的私有成員
}