垃圾值 - C ++中的继承

时间:2012-09-23 12:07:07

标签: c++ inheritance constructor virtual abstract

我有一个课程如下:

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();

数据成员似乎在构造函数中具有合法值。但是,当我使用类似的功能时,即具有相同的可见性模式时,似乎会出现垃圾值。

2 个答案:

答案 0 :(得分: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
}

你正在做的是自我分配参数,因此成员不会被设置。

答案 1 :(得分:3)

您永远不会初始化您的成员变量。 a=a;将分配给局部变量a(参数),而不是成员变量。它应该是this->a=a;。其他成员也一样。