1ǿκ¶ʹֵָáһñָĳЩʹһָһ󣬵ǸñĳЩʱҲָܲκζӦðѱΪָ룬ΪԸֵñ෴϶ָһƲΪգʱͿ԰ѱΪáֵָʵζʹõĴЧʱʹָҪߡ

2Ϸʹ֮ǰҪĺϷԡ෴ָӦǱԣֹΪա

3޸ָõһҪĲָͬԱ¸ֵָһͬĶ󡣵ָڳʼʱָĶԺܸı䣬ָĶݿԸı䡣

4Ӧܵ˵Ӧʹָ룺һ㿼ǵڲָκζĿܣ£ָܹΪգҪܹڲͬʱָͬĶ£ܸıָָ򣩡ָһһָһͲıָôӦʹá 

³http://www.diybl.com/course/3_program/c++/cppxl/20081125/152591.html






ָõ

(1)ָһ,ûν null reference .епָһҲɿָܲʹ ָ. 

C++ Ҫ reference ָһ referenceҪгֵ. 

String & rs = string1; 

ûν null reference ʹǰҪвǷֵ.,ʹָҪЧ. 

(2)ָԱ¸ֵreferenceָصĶ. 

(3)ʹreferenceĳ. Operator[]  ڸòرر뷵 [ܹassignment ֵ] Ķ,Ҫһ reference. 

(4)ʵںĲʹúܾ. 

void Get***(const int& a) //ʹпԱ֤޸ıõֵ 

{ 

} 


úָ

 ͬ㣺
1. ǵַĸ
ָָһڴ棬ָڴĵַĳڴı

 
1. ָһʵ壬ýǸ
2. ʹʱ(*)ָҪã
3. ֻڶʱʼһΣ֮󲻿ɱ䣻ָɱ䣻
áһա ^_^
4. û constָ constconst ָ벻ɱ䣻
5. òΪգָΪգ
6. sizeof áõָı()ĴСsizeof ָ롱õָ뱾(ָıĵַ)ĴС
typeid(T) == typeid(T&) Ϊ棬sizeof(T) == sizeof(T&) Ϊ棬
ǵΪԱʱռÿռָͬûҵ׼Ĺ涨
7. ָõ(++)岻һ

 ϵ
1. ڲָʵ֣ʵ֣
2. һӦöԣΪָ룬᷸ǲ˵ָ루ȡݲ
C++еĸѧװúָһһ³Уn m һ 
ãreferencem Ǳreferent 
int m; 
int &n = m; 
n ൱m ıºţn κβǶm ĲСë 
Ĵºǡë˵ëôôģʵǶСë˵ġn Ȳ 
m ĿҲָm ָ룬ʵn m Լ 
õһЩ£ 
1ñͬʱ뱻ʼָκʱ򱻳ʼ 
2NULL ãñϷĴ洢ԪָNULL 
3һñʼͲܸıõĹϵָʱıָĶ󣩡 
ʾУk ʼΪi ák = j ܽk ޸ĳΪj  
ãֻǰk ֵıΪ6k i ãi ֵҲ6 
int i = 5; 
int j = 6; 
int &k = i; 
k = j; // k i ֵ6; 
ĳϷûֳõļֵõҪǴ 
ݺĲͷֵC++УĲͷֵĴݷʽֵ֣ݡ 
ָ봫ݺôݡ 
ǡֵݡʾFunc1 ڵx ⲿn һݿ 
ıx ֵӰn, n ֵȻ0 
void Func1(int x) 
{ 
x = x + 10; 
} 
int n = 0; 
Func1(n); 
cout << n =  << n << endl;// n = 0 
ǡָ봫ݡʾFunc2 ڵx ָⲿn ָ 
룬ıָݽn ֵı䣬n ֵΪ10 
void Func2(int *x) 
{ 
(* x) = (* x) + 10; 
} 
&#8943; 
int n = 0; 
Func2(&n); 
cout << n =  << n << endl; // n = 10 
ǡôݡʾFunc3 ڵx ⲿn ãx 
n ͬһıx ڸınn ֵΪ10 
void Func3(int &x) 
{ 
x = x + 10; 
} 
&#8943; 
int n = 0; 
Func3(n); 
cout << n =  << n << endl; // n = 10 
Աʾ򣬻ᷢ֡ôݡָ봫ݡдʽ 
ֵݡʵϡáκ顰ָ롱ҲܹΪʲôҪá 
ⶫ 
ǡʵĹǡֵĹ 
ָܹԼزڴеζָ빦ǿ󣬵ǷǳΣա 
һѵָֽסȵȣ˭ã 
ȷֻҪһĳġôááҪáָ롱 
ⷢ⡣˵ĳҪһ֤ļϸϹµӡӾˣ 
ȡµԿ׽ôͻ˲еȨ 
 
ժԡc̡
ָãMore Effective C++ һϸҸת 
һָõ 
ָÿȥȫָͬò*͡->ʹò.ƺͬĹܡָöξʲôʱʹָ룬ʲôʱʹأ 
ȣҪʶκ¶ֵָáһñָĳЩʹһָһ󣬵ǸñĳЩʱҲָܲκζʱӦðѱΪָ룬ΪԸֵñ෴϶ָһƲΪգʱͿ԰ѱΪá 
ǣһ¡㻳ɵʣĴʲôĺ 
char *pc = 0; // ָΪֵ 
char& rc = *pc; // ֵָ 
ǷǳкģʡǲȷģܲһЩκ鶼пܷӦö㿪д˳ͬ㵣ĴôȫʹãҪȻȥøĳԱȥԺ󽫺һֵָĿԡ 
Ϊÿ϶ָһCӦʼ 
string& rs; // ñ뱻ʼ 
string s("xyzzy"); 
string& rs = s; // ȷrsָs 
ָûơ 
string *ps; // δʼָ 
// ϷΣ 
ֵָʵζʹõĴЧʱʹָҪߡΪʹ֮ǰҪĺϷԡ 
void printDouble(const double& rd) 
{ 
cout << rd; // Ҫrd, 
} // ϶ָһdoubleֵ 
෴ָӦǱԣֹΪգ 
void printDouble(const double *pd) 
{ 
if (pd) { // ǷΪNULL 
cout << *pd; 
} 
} 
ָõһҪĲָͬԱ¸ֵָһͬĶ󡣵ָڳʼʱָĶԺܸı䡣 
string s1("Nancy"); 
string s2("Clancy"); 
string& rs = s1; // rs  s1 
string *ps = &s1; // ps ָ s1 
rs = s2; // rs Ծs1, 
//  s1ֵ 
// "Clancy" 
ps = &s2; // ps ָ s2; 
// s1 ûиı 
ܵ˵Ӧʹָ룬һ㿼ǵڲָκζĿܣ£ָܹΪգҪܹڲͬʱָͬĶ£ܸıָָ򣩡ָһһָһͲıָôӦʹá 
һǵĳʱӦʹáͨǲ[]͵÷ǷһĿֵܱ 
vector<int> v(10); // vectorСΪ10; 
// һڱ׼Cеһģ(35) 
v[5] = 10; // ֵĿǲ[]صֵ 
[]һָ룬ôһ͵д 
*v[5] = 10; 
ʹvȥһָ롣ѡòһáһȤ⣬μ30 
ָ֪һҲıָʱزΪֹҪʱ㲻Ӧʹָ롣ڳ֮£Ӧʹָ 
 
void func(int* p, int&r); 
int a = 1; 
int b = 1; 
func(&a,b); 
ָ뱾ֵ(ֵַ)pass by valueеģܸıֵַⲢıָָıֵ 
p = someotherpointer; //a is still 1 
ָıָָıֵ 
*p = 123131; // a now is 123131 
ñpass by referenceеģıֵıӦıֵ 
r = 1231; // b now is 1231













  c++Уʽ   ָ붼ڱúиıúıáʲôʱ?ʲôʱָ void function (int *ptr); void function(int &ref); 
    û ضĹ涨 ѧ ˣ ϰʲôʱָʲôʱ!
 ָʲô
 1) ñ뱻ʼָ벻ء 
 2) óʼԺܱı䣬ָԸıָĶ
 3) ֵָãǴֵָָ롣 
    C++оá ˾еöָ룬ָ׳ 
    õȻֱ۸ֱӣʱںڲҪָЩãԽʣ̬ʲôģÿԴָ롣 
    C++ һ㶼þͿ ... C ûãʹָ .... 
    £
 1 ʹָ봫ݲʱ 
 void function (int *ptr) { ;}
 øúʱ 
 main()
 { int p; function (&p); } 
 2 ʹôݲʱ
 void function(int &ref) { ;} 
 øúʱ 
 main() 
 { int p; function (p); }
 ɴ˿ɼʹñʹָ봫ݲʱ򵥣úָ빦ܴͬпռʱʹָ룬Ϊͷſռʱ
 ָֻҪdeleteˣǲɾռģñָһڵĶ
  
    ָõĲ 
 1. ǿյĲκ¶ʹֵָ.һñָĳ. ڵֵָʵζʹõĴЧʱʹָҪ.
 2. Ϸʹ֮ǰҪĺϷ.ָ. 
 3. ޸ ָԱ¸ֵһͬĶ.ָڳʼʱƶĶ,Ժܸı.ָĶݿԸı. 
 Ӧʹָ: ܴڲָκζĿ ҪڲͬʱָͬĶ(ʱ,ܹıָָ) 
 Ӧʹõ: ָһһָһͲıָ,ʹôʱӦʹá 
    
 ҪȺúָõ 
    ָÿȥȫָͬò*͡->ʹò.ƺͬĹܡ
 ָöξʲôʱʹָ룬ʲôʱʹأ 
ȣҪʶκ¶ֵָáһñָĳЩʹһָһ
 ǸñĳЩʱҲָܲκζʱӦðѱΪָ룬ΪԸֵñ෴϶ָһ
 ƲΪգʱͿ԰ѱΪá

ǣһ¡㻳ɵʣĴʲôĺ

char *pc = 0; // ָΪֵ

char& rc = *pc; // ֵָ

ǷǳкģʡǲȷģܲһЩκ鶼пܷӦö㿪д˳ͬ
 㵣ĴôȫʹãҪȻȥøĳԱȥԺ󽫺һֵָĿԡ

Ϊÿ϶ָһCӦʼ

string& rs; // ñ뱻ʼ 
string s(\"xyzzy\"); 
string& rs = s; // ȷrsָs

ָûơ 
string *ps; // δʼָ 
          // ϷΣ

ֵָʵζʹõĴЧʱʹָҪߡΪʹ֮ǰҪĺϷԡ

void printDouble(const double& rd) 
{ 
cout << rd; // Ҫrd, 
}  // ϶ָһdoubleֵ

෴ָӦǱԣֹΪգ

void printDouble(const double *pd) 
{ 
if (pd) 
{// ǷΪNULL 
cout << *pd; 
} 
}

ָõһҪĲָͬԱ¸ֵָһͬĶ󡣵ָڳʼʱָĶԺܸı䡣

string s1(\"Nancy\"); 
string s2(\"Clancy\");

    string& rs = s1; // rs  s1 
string *ps = &s1; // ps ָ s1 
rs = s2; // rs Ծs1 
        //  s1ֵ\"Clancy\"

    ps = &s2; // ps ָ s2;// s1 ûиı

ܵ˵Ӧʹָ룬һ㿼ǵڲָκζĿܣ£ָܹΪգ
 ҪܹڲͬʱָͬĶ£ܸıָָ򣩡ָһһָһͲıָôӦʹá 
 һǵĳʱӦʹáͨǲ[]͵÷ǷһĿֵܱ

vector<int> v(10); //vectorСΪ10 
                  //һڱ׼Cеһģ
v[5] = 10; // ֵĿǲ[]صֵ

[]һָ룬ôһ͵д

*v[5] = 10;

ʹvȥһָ롣ѡòһ 
ָ֪һҲıָʱزΪֹҪʱ㲻Ӧʹָ롣
 ڳ֮£Ӧʹָ  


































C++úָ:


  ͬ㣺
 1. ǵַĸ
     ָָһڴ棬ָڴĵַĳڴı

  
 1. ָһʵ壬ýǸ
 2. ʹʱ(*)ָҪã
 3. ֻڶʱʼһΣ֮󲻿ɱ䣻ָɱ䣻
     áһա ^_^
 4. û constָ constconst ָ벻ɱ䣻
 5. òΪգָΪգ
 6. sizeof áõָı()ĴСsizeof ָ롱õָ뱾(ָı   

     ַ)ĴС
     typeid(T) == typeid(T&) Ϊ棬sizeof(T) == sizeof(T&) Ϊ棬
     ǵΪԱʱռÿռָͬûҵ׼Ĺ涨
 7 . ָõ(++)岻һ



 


