2017-10-11 2 views
0

だから、簡単な質問には、次のとおりです。データメンバーのクラス内初期化。その値は継承の後に残されますか?私はこのような状況を持っている場合

class FooA{ 
public: 
    int getID(){ 
     return ID; 
    } 
private: 
    int generateID(){ 
     //some code that generate unique ID 
    } 
    int ID = generateID(); 
}; 

class FooB : public FooA{ 

}; 

はFooAに初期化されIDがfoob型にも行くだろうか?したがって、FooBではgetIDを使用でき、たとえばFooA :: generateIDから値を取得できます。

+1

短い答えは "はい" です。長い答えはそれを試して、それが動作しない場合は、ポストに戻ってくる。 –

+0

今すぐ試すことはできませんが、答えが必要です。もしあなたが確信しているなら、それに答えてください、そして、私は解決されたようにトピックをマークします。 –

+0

サンプル 'main'を投稿できますか?私はあなたが基本クラスにアクセスするFooBの単一のインスタンスを意味するのか、FooBの複数のインスタンスが同じ 'ID'値を共有するかを尋ねているのか混乱しています。 – AndyG

答えて

0

両方のクラスのすべてのインスタンスは、generateIDを新たに実行し、すべてのインスタンスに対して一意の値を生成します。 いいえ、親クラスのインスタンスに対して生成されたIDは、異なるインスタンスを持つため、子孫のインスタンスに対して生成されたIDと同じではありません。 はい、子孫は親のメソッドを使用または公開できます。

class FooA{ 
    public: 
     int getID(){ 
      return ID; 
     } 
    private: 
     int generateID(){ 
      static int i = 0; 
      return i++; 
     } 
     int ID = generateID(); 
    }; 

    class FooB : public FooA{ 

    }; 

int main() { 
    // your code goes here 
    cout << (FooA()).getID() << endl; // 0 
    cout << (FooA()).getID() << endl; // 1 
    cout << (FooB()).getID() << endl; // 2 
    return 0; 
} 

https://ideone.com/5Klf3d

関連する問題