2012-09-23 72 views
2

我有一個類,如下所示:垃圾值 - 繼承在C++

class base 
{ 
    protected: 
     int x; 
     int y; 
     int z; 
    public: 
     base(int x, int y, int z) 
     { 
      x = x; 
      y = y; 
      z = z; 
     } 
     virtual void show(); 
}; 

我導出從上述作爲一類:

class derived : protected base 
{ 
    public: 
     int a; 
     int b; 
     int c; 
     derived(int a, int b, int x, int y, int z) : base(x, y, z) //initialising the base class members as well 
     { 
      cout<<a<<b<<x<<y<<z; //works fine 
      a = a; 
      b = b; 
     } 
     void show() 
     { 
      cout<<a<<b<<x<<y<<z; //show junk values    
     } 
     //some data members and member functions 
}; 

在main(),我使用:

derived d(1, 2, 3, 4, 5); 

    d.show(); 

數據成員在構造函數中似乎具有合法值。但是,當我使用類似功能時,即使用相同的可見性模式時,垃圾值似乎會出現。

+1

你應該調用派生基礎構造函數爲'base(x,y,z)'? – Vikdor

+0

@Vikdor:是的。糾正。 –

回答

5
a = a; 
b = b; 

應該

this->a = a; 
this->b = b; 

,或者甚至更好,使用初始化列表:

derived(int a, int b, int x, int y, int z) : a(a), b(b), base(x,y,z) 
{ 
    cout<<a<<b<<x<<y<<z; //works fine 
} 

你在做什麼是自我分配的參數,所以會員不要」不會被設置。

+0

謝謝。這使它。瞭解爲什麼這種方式會非常有幫助。 –

+1

@KuttuV在答案中 - 您將參數命名爲與您的成員相同,以便成員隱藏,除非您符合條件。 –

+0

謝謝。清除了。 –

3

你永遠不會初始化你的成員變量。 a=a;將分配給本地變量a(參數),而不是成員變量。它應該是this->a=a;。其他成員也一樣。

+0

謝謝。及時的援助。 –