2017-07-06 20 views
0

私はC++のリファレンスについて混乱しています。私は&を削除して、このような機能は、コードが動作しませんstring getName作るときにも変数への参照

class Dog 
    { 
     public: 
      Dog(void) { 
       age = 3; 
       name = "dummy"; 
      } 

      void setAge(const int & a) { 
       age = a; 
      } 

     string & getName(void) { 
       return name; 
      } 

      void print(void) { 
       cout << name << endl; 
      } 

     private: 
      int age; 
      string name; 

    }; 

int main(void) { 
    Dog d; 
    string & name = d.getName(); // this works and I return reference, so the address of name will be the same as address of name in Dog class. 

    int a = 5; 
    int & b = a; // why this works? by the logic from before this should not work but the code below should. 
    int & c = &a // why this does not work but the code above works? 
} 

:誰も私にこれを説明してもらえます。

+0

は*この作品、私は参照を返すプライベートクラスメンバーのメモリへのアクセスを提供します名前のアドレスはDogクラスの名前のアドレスと同じになります。参考文献をポインタと見なさないでください。彼らはそれらのように動作し、それらと一緒に実装することができますが、ポインタではありません。それらは参考文献です。 – NathanOliver

+0

良い読書:https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in – NathanOliver

+0

私は彼らが指摘しているとは言わなかったしかし、両方の変数のアドレスは同じです。main functonの変数名は、Dogクラスの変数名のアドレスである値を持っています。 – stilltryingbutstillsofar

答えて

2

int & b = a; 

b場合はaへの参照であり、タイプintのデータに割り当てられたメモリは、両方の名前abによって入手可能です。

場合
int & c = &a; 

あなたはaのために割り当てられたメモリのアドレスを保存しようとしている - 単項&の結果を - int & cに...このリードはエラーに。この方法の場合

stringへの参照が返され
string & getName(void) 

、そうstring & namemain内の変数)ので、string name;

関連する問題