【问题标题】:Junk values - Inheritance in C++垃圾值 - C++ 中的继承
【发布时间】:2012-09-15 03:46:16
【问题描述】:

我有一堂课如下:

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

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

【问题讨论】:

  • 你应该在派生中调用基本构造函数base(x, y, z)吗?
  • @Vikdor:是的。已更正。

标签: c++ inheritance constructor virtual abstract


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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
    }
    

    您所做的是自行分配参数,因此不会设置成员。

    【讨论】:

    • 谢谢。做到了。任何关于为什么这种方式真的很有帮助的见解。
    • @KuttuV 在答案中 - 您将参数命名为与您的成员相同,因此除非您限定成员,否则成员将被隐藏。
    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多