2012-09-23 75 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

谢谢。及时的援助。 –