2011-06-07 18 views
0

我是新的C++和感到困惑某物最新的差異定義對象的成員的值,指針或參考

我要去定義一個類,並且當我應該定義一個成員指針?或者我應該在什麼時候爲成員定義一個值?或者我應該什麼時候將它定義爲參考?

什麼困惑我的是當我讀了這本書TCPL 24.3.3 它說, 「指針溶液應當有需要的壽命期間,將指針更改爲‘’包含'對象使用在'包含「」的對象,例如:

class C 
{ 
    int a; 
public: 
    C(int i):a(i){}; 
}; 

class C2 
{ 
    C a; 
    C *p; 
public: 
    C2(int i):a(i), p(new C(i)){}; 
    ~C2(){delete p;} 

    C ChangeValue(C c) 
    { 
     C temp = a; 
     a = c; 
     return temp; 
    } 

    C* ChangePointer(C *c) 
    { 
     C* temp = p; 
     p = c; 
     return temp; 
    } 
}; 

我認爲這是使用衣被合計爲一類成員....沒有區別

請幫助我通過這個:)

+0

[C++中指針變量和引用變量之間的區別是什麼?](http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and- reference-variable-in-c) – iammilind 2011-06-07 04:03:04

+0

我知道指針和引用之間的區別,我在這裏問有什麼區別定義一個類成員的值,並定義一個類成員的指針 – shengy 2011-06-07 05:04:13

回答

1

指針可以指向不同的「當有需要的‘’含有‘’對象的生命週期期間,將指針改變到‘包含‘’’對象的指針溶液應使用」對象類型。
引用只是類型的別名,不能綁定到其他類型。他們仍然是他們在申報時被約束的對象的別名。

例如:

int i,j,k; 
i = 10; 
j=20; 
k=30; 
int *ptr; 
ptr = &i;  //ptr now points to i 
ptr = &j;  //ptr now points to j, Allowed! 
int &ref = i; //ref is alias of i 
ref = j;  //Allowed BUT It assigns value of j to i and doesnt point ref to j 

,如果你希望你的成員變量是指向不同的對象則應該是指針,那麼它應該是引用的語句的意思。

注意:您可以通過使用const pointers獲得與指針相同的行爲。

+0

因此,只有當我需要一個類成員指向它的派生類,我應該使用指針作爲類的成員,我說得對嗎? – shengy 2011-06-07 05:49:01

+0

@Shengy:當你希望你的成員應該能夠指向不同的對象時,你應該使用一個成員作爲指向成員的指針,因爲引用不能指向(引用)不同的對象,它會一直引用相同的obj。 – 2011-06-07 07:14:08

2

最好的方法t o想一下指針是「淺拷貝」還是「深拷貝」。當我使用特定的對象時,當它傳遞給不同的作用域(不同的函數或類)時它會被重複嗎?如果我不希望它被複制,我應該使用一個指針,否則我可以將它聲明爲一個值(我應該注意,通過引用傳遞是圍繞這個通用規則的一種方式)。

真的這取決於您的應用程序。有時我會用指針作爲成員來設計一個特定的類,然後發現它切換更合理,反之亦然。