c/c++ accumulation
非const引用只能綁定到與該引用同類型的對(duì)象;
const引用則可以綁定到不同但相關(guān)的類型的對(duì)象或綁定到右值。
?
因?yàn)轭^文件包含在多個(gè)源文件中,所以不應(yīng)該含有變量或函數(shù)的定義。這個(gè)規(guī)則有三個(gè)例外,頭文件可以定義類、值在編譯時(shí)就已知道得const對(duì)象和inline函數(shù)。這些實(shí)體可在多個(gè)源文件中定義,只要每個(gè)源文件中的定義是相同的。
?
?
C++ const變量在實(shí)際編程中起著非常重要的作用,當(dāng)我們?cè)诼暶鲿r(shí),需要對(duì)其加初始化,因?yàn)槟J(rèn)的內(nèi)部連接都必須被初始化。
?
?
指針和引用:
它們之間有兩個(gè)重要的區(qū)別。第一個(gè)區(qū)別在于引用總是指向某個(gè)對(duì)象:定義引用時(shí)沒(méi)有初始化對(duì)象是錯(cuò)誤的。第二個(gè)重要的區(qū)別則是賦值行為的差異:給引用賦值修改的是該引用做關(guān)聯(lián)的對(duì)象,而并不是使引用與另一個(gè)對(duì)相關(guān)聯(lián)。引用一經(jīng)初始化,就始終指向同一個(gè)特定對(duì)象(這就是為什么引用必須在定義時(shí)初始化的yuanyin)
?
?
typedef和#define的區(qū)別
1.可以用其他類型說(shuō)明符對(duì)宏類型名進(jìn)行擴(kuò)展,但對(duì)typedef所定義的類型名卻不能這樣做。
例: #define peach int
unsigned peach i; ?//ok
typedef int banana;
unsigned banana i; //error,illegal
2.在連續(xù)幾個(gè)變量的聲明中,用typedef定義的類型能夠保證聲明中所有的變量均為同一種類型,而用#define定義的類型則無(wú)法保證
例: #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類型對(duì)象的const指針,相當(dāng)于srting * const cstr;
?
?
int *ip[4]; //array of pointers to int
int (*ip)[4]; //pointer to an array of 4 ints
?
?
c++中規(guī)定了計(jì)算其操作數(shù)次序的操作符有:&&,||(這兩個(gè)操作符的操作數(shù)計(jì)算順序?qū)е铝硕搪番F(xiàn)象),?:(條件操作符)和,(逗號(hào))。
?
?
const引用比非const引用更加靈活,因?yàn)閏onst引用能接受const類型、非const類型、右值以及其他可轉(zhuǎn)換成該類型的值,例如short a = 0;?const int& b = a;,而非const型引用只能接受和自己類型完全相同的值,不能接受其他類型、const引用或右值。
?
沒(méi)有默認(rèn)構(gòu)造函數(shù)的類類型的成員,以及const或引用類型的成員,不管是哪種類型,都必須在構(gòu)造函數(shù)初始化列表中進(jìn)行初始化。
?
?
?
c++容器中的元素不能是引用類型,輸入輸出標(biāo)準(zhǔn)庫(kù)類型和auto_ptr類型。
?
函數(shù)的參數(shù)聲明為const型的引用或指針的好處是調(diào)用該函數(shù)時(shí)既可以給該參數(shù)傳遞const的引用或指針,也可以傳遞非const型的引用或指針,而如果參數(shù)聲明為非const型,則調(diào)用函數(shù)時(shí)只能為其傳遞非const型的引用和指針。
?
虛函數(shù)的作用是實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,也就是在程序的運(yùn)行階段動(dòng)態(tài)地選擇合適的成員函數(shù),在定義了虛函數(shù)后,可以在基類的派生類中對(duì)虛函數(shù)重新定義,在派生類中重新定義的函數(shù)應(yīng)與虛函數(shù)具有相同的形參個(gè)數(shù)和形參類型,以實(shí)現(xiàn)統(tǒng)一的接口,不同定義過(guò)程。如果在派生類中沒(méi)有對(duì)虛函數(shù)重新定義,則它繼承其基類的虛函數(shù)。
?
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)只是對(duì)外屏蔽了Base類里的fcn(屏蔽接口),但實(shí)際D1類中依然保存了Base類里的fcn的實(shí)現(xiàn)(未屏蔽實(shí)現(xiàn)),所以D2才可以重定義Base類的fcn實(shí)現(xiàn)多態(tài)。
D1 d1obj;
D1 *pd1 = &d1obj;
pd1->fcn(1): //OK
pd1->Base::fcn(): //OK
pd1->fcn(): //error: no matching function for call to 'D1::fcn()'|(屏蔽接口)
自動(dòng)化總結(jié)
以上是生活随笔為你收集整理的c/c++ accumulation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: consul java connect_
- 下一篇: s3c2440移植MQTT