c/c++ accumulation
非const引用只能綁定到與該引用同類型的對象;
const引用則可以綁定到不同但相關的類型的對象或綁定到右值。
?
因為頭文件包含在多個源文件中,所以不應該含有變量或函數的定義。這個規則有三個例外,頭文件可以定義類、值在編譯時就已知道得const對象和inline函數。這些實體可在多個源文件中定義,只要每個源文件中的定義是相同的。
?
?
C++ const變量在實際編程中起著非常重要的作用,當我們在聲明時,需要對其加初始化,因為默認的內部連接都必須被初始化。
?
?
指針和引用:
它們之間有兩個重要的區別。第一個區別在于引用總是指向某個對象:定義引用時沒有初始化對象是錯誤的。第二個重要的區別則是賦值行為的差異:給引用賦值修改的是該引用做關聯的對象,而并不是使引用與另一個對相關聯。引用一經初始化,就始終指向同一個特定對象(這就是為什么引用必須在定義時初始化的yuanyin)
?
?
typedef和#define的區別
1.可以用其他類型說明符對宏類型名進行擴展,但對typedef所定義的類型名卻不能這樣做。
例: #define peach int
unsigned peach i; ?//ok
typedef int banana;
unsigned banana i; //error,illegal
2.在連續幾個變量的聲明中,用typedef定義的類型能夠保證聲明中所有的變量均為同一種類型,而用#define定義的類型則無法保證
例: #define int_ptr int*
int_ptr chalk, cheese; //chalk is int*, but cheese is int
typedef char * char_ptr;
char_ptr Bentley, Rolls_Royce; //both Bentley and Rolls_Royce are char *
注意c++中: typedef string *pstring
const pstring cstr;
上面聲明中cstr為指向string類型對象的const指針,相當于srting * const cstr;
?
?
int *ip[4]; //array of pointers to int
int (*ip)[4]; //pointer to an array of 4 ints
?
?
c++中規定了計算其操作數次序的操作符有:&&,||(這兩個操作符的操作數計算順序導致了短路現象),?:(條件操作符)和,(逗號)。
?
?
const引用比非const引用更加靈活,因為const引用能接受const類型、非const類型、右值以及其他可轉換成該類型的值,例如short a = 0;?const int& b = a;,而非const型引用只能接受和自己類型完全相同的值,不能接受其他類型、const引用或右值。
?
沒有默認構造函數的類類型的成員,以及const或引用類型的成員,不管是哪種類型,都必須在構造函數初始化列表中進行初始化。
?
?
?
c++容器中的元素不能是引用類型,輸入輸出標準庫類型和auto_ptr類型。
?
函數的參數聲明為const型的引用或指針的好處是調用該函數時既可以給該參數傳遞const的引用或指針,也可以傳遞非const型的引用或指針,而如果參數聲明為非const型,則調用函數時只能為其傳遞非const型的引用和指針。
?
虛函數的作用是實現動態聯編,也就是在程序的運行階段動態地選擇合適的成員函數,在定義了虛函數后,可以在基類的派生類中對虛函數重新定義,在派生類中重新定義的函數應與虛函數具有相同的形參個數和形參類型,以實現統一的接口,不同定義過程。如果在派生類中沒有對虛函數重新定義,則它繼承其基類的虛函數。
?
class Base {
public:
virtual int fcn(){return 0;}
};
class D1 : public Base {
public:
// hides fcn in the base; this fcn is not virtual
int fcn(int a){return a;} // parameter list differs from fcn in Base
// int fcn(){return 1;}
// D1 inherits definition of Base::fcn()
};
class D2 : public D1 {
public:
int fcn(int a){return a;} // nonvirtual function hides D1::fcn(int)
int fcn(){return 2;} // redefines virtual fcn from Base
};
D1中的int fcn(int a)只是對外屏蔽了Base類里的fcn(屏蔽接口),但實際D1類中依然保存了Base類里的fcn的實現(未屏蔽實現),所以D2才可以重定義Base類的fcn實現多態。
D1 d1obj;
D1 *pd1 = &d1obj;
pd1->fcn(1): //OK
pd1->Base::fcn(): //OK
pd1->fcn(): //error: no matching function for call to 'D1::fcn()'|(屏蔽接口)
自動化總結
以上是生活随笔為你收集整理的c/c++ accumulation的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: consul java connect_
- 下一篇: android 修复工具下载,安卓数据恢
