C++PRimer
inline
調(diào)用函數(shù)不但必須拷貝兩個(gè)實(shí)參保存機(jī)器的寄存器程序還必須轉(zhuǎn)向一個(gè)新位置。
將在程序中每個(gè)調(diào)用點(diǎn)上被內(nèi)聯(lián)地 展開(kāi)
函數(shù)聲明或定義中的函數(shù)返回類(lèi)型前加上關(guān)鍵字 inline
把 inline 函數(shù)的定義放到頭文件中在每個(gè)調(diào)用該 inline
函數(shù)的文件中包含該頭文件
函數(shù)原型
函數(shù)聲明由函數(shù)返回類(lèi)型函數(shù)名和參數(shù)表構(gòu)成這三個(gè)元素被稱(chēng)為函數(shù)聲明 function
declaration 或函數(shù)原型 functionprototype
缺省實(shí)參
char *screenInit( int height = 24, intwidth = 80,
char background = ' ' );
// 等價(jià)于 screenInit(24,80,' ')
cursor = screenInit();
// 等價(jià)于 screenInit(66,88, ' ')
cursor = screenInit(66);
指向函數(shù)的指針
int gcd( int, int ){
return 44;
}
int (*pf)( int, int );
int main()
{
pf=gcd;
cout <<pf(2,3) << endl;
函數(shù)指針的數(shù)組
pf=gcd;
extern
externint i;(extern 只聲明不定義,去掉會(huì)造成重復(fù)定義)
externint i;(可以重復(fù)聲明。)
extern int i ;(全局變量為0;extern可加可不加)
inti ;(error,重復(fù)定義)
intmain()
{
cout<<i << endl;
extern對(duì)于函數(shù),同上。
局部對(duì)象
局部變量的生命期局限于所在函數(shù)的每次執(zhí)行期間。
自動(dòng)對(duì)象
為初始化的內(nèi)置類(lèi)型局部變量,其初值不確定。
當(dāng)函數(shù)調(diào)用結(jié)束時(shí),自動(dòng)對(duì)象就會(huì)撤銷(xiāo)。
形參也是自動(dòng)對(duì)象。
一個(gè)變量如果位于函數(shù)的作用域內(nèi),但生命期跨越了這個(gè)函數(shù)的多次調(diào)用,這種變量往往很有用。應(yīng)該將這樣的對(duì)象對(duì)象定義為static。 static局部對(duì)象確保不遲于在程序執(zhí)行流程第一次經(jīng)過(guò)該對(duì)象的定義語(yǔ)句時(shí)進(jìn)行初始化。這種對(duì)象一旦被創(chuàng)建,在程序結(jié)束前都不會(huì)撤銷(xiāo)。
函數(shù)調(diào)用:調(diào)用前先保存寄存器,并在返回時(shí)恢復(fù);
auto_ptr
用來(lái)釋放數(shù)組的 delete 表達(dá)式形式如下
delete[] str1;
constint *pci = new const int(1024);
deletepci;
名字空間定義
namespacecplusplus_primer {
class matrix { /* ... */ };
void inverse ( matrix & );
constdouble pi = 3.1416;
}
void cplusplus_primer::inverse ( matrix &m){}
void func( cplusplus_primer::matrix &m )
{cplusplus_primer::inverse(m);}
cplusplus_primer::matrix m;
func(m );
名字空間的定義可以非連續(xù)
namespacecplusplus_primer {}
if( cur > ::max ) break;
嵌套域
cplusplus_primer::MatrixLib::matrix
隱藏
隱藏 ::Type
隱藏 MatrixLib::val
未命名的名字空間
namespace {
void swap2( double d1, double d2 ) { /* ... */}
}
swap2(3,4);
未命名名字空間成員名只在特定的文件中可見(jiàn) 在構(gòu)成程序的其他文件中是不可
見(jiàn)的
// 短別名
namespace mlib2 = cplusplus_primer::MatrixLib;
namespace mlib=mlib2;
// 較易讀
void func( mlib::matrix &m )
{
cout << mlib::pi<< endl;
}
mlib::matrix m22;
func( m22 );
using cplusplus_primer::MatrixLib::matrix;
matrix m22;
func( m22 );
using cplusplus_primer::MatrixLib::matrix;=using namespacecplusplus_primer::MatrixLib;
.
ostream& Operator<< ( ostream&o, const Screen& s ){
cout << s.addToken()<< endl;
}
int addToken( )const ;
這些函數(shù)被自動(dòng)作為 inline 函數(shù)處理
把成員函數(shù)聲明為 const 以表明它們不修改類(lèi)對(duì)象
只有被聲明為 const 的成員函數(shù)才能被一個(gè) const 類(lèi)對(duì)象調(diào)用
把一個(gè)修改類(lèi)數(shù)據(jù)成員的函數(shù)聲明為 const 是非法的
構(gòu)造函數(shù)和析構(gòu)函數(shù)不是 const 成員函數(shù) const類(lèi)對(duì)象也可以調(diào)用它們
當(dāng)構(gòu)造函數(shù)執(zhí)行結(jié)束 類(lèi)對(duì)象已經(jīng)被初始化時(shí) 類(lèi)對(duì)象的常量性就
被建立起來(lái)了 析構(gòu)函數(shù)一被調(diào)用 常量性就消失 所以一個(gè) const 類(lèi)對(duì)象 從構(gòu)造完成時(shí)
刻到析構(gòu)開(kāi)始時(shí)刻 這段時(shí)間內(nèi)被認(rèn)為是 const
Account myAcct( "Tinkerbell");
Tinkerbell 被轉(zhuǎn)換成一個(gè)臨時(shí)的 string 對(duì)象 然后該對(duì)象冉被傳遞給一個(gè)雙參數(shù)的構(gòu)
造函數(shù) 它的第一個(gè)參數(shù)是 string 類(lèi)型
對(duì)于我們的新 string 類(lèi)類(lèi)型不夠用 例如如下代碼將失敗
string new_client( "SteveHall" );
Account new_acct( new_client, 25000 );
因?yàn)樵趶?string 對(duì)象到 char*之間沒(méi)有隱式轉(zhuǎn)換 而寫(xiě)成
成員初始化表跟在構(gòu)造函數(shù)的原型后 由冒號(hào)開(kāi)頭
如果成員是類(lèi)對(duì)象 則初始值變成被傳遞給適當(dāng)?shù)臉?gòu)造函數(shù)的實(shí)參 該構(gòu)造函數(shù)然后被應(yīng)用在成員類(lèi)對(duì)象上
在我們的例子中 name 被傳遞給
應(yīng)用在_name 上的 string 構(gòu)造函數(shù) _balance 用參數(shù) opening_bal 初始化
Account( const Account &rhs )
{
_name = rhs._name;
在隱式初始化階段調(diào)用了缺省的 string 構(gòu)造函數(shù) 并且在構(gòu)造函數(shù)體內(nèi)調(diào)用了
string 拷貝賦值操作符
成員初始化表:將成員的初始化和賦值分開(kāi)。
缺省的按成員賦值 default memberwiseassignment 所處理的是 用一個(gè)類(lèi)對(duì)象向該類(lèi)
的另一個(gè)對(duì)象的賦值操作
利用了一個(gè)隱式的拷貝賦值操作符來(lái)取代拷貝構(gòu)造函數(shù)
可能會(huì)生成一個(gè)缺省構(gòu)造函數(shù) 但是它不會(huì)為內(nèi)置或復(fù)
合型的數(shù)據(jù)成員 如指針或數(shù)組 提供初始值
拷貝構(gòu)造函數(shù) inline Account::Account( const Accout&rhs )
用一個(gè)類(lèi)對(duì)象初始化該類(lèi)的另一個(gè)對(duì)象被稱(chēng)為缺省按成員初始化
一個(gè)類(lèi)對(duì)象向該類(lèi)的另一個(gè)對(duì)象作拷貝是通過(guò)依次拷貝每個(gè)非靜態(tài)數(shù)據(jù)成員來(lái)實(shí)現(xiàn)的
按成員賦值inline Account&Account::operator=(const Account &rhs )
一般來(lái)說(shuō) 如果缺省的按成員初始化對(duì)于一個(gè)類(lèi)不合適 則缺省的按成員賦值也不合適
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注