我有一个课程如下:
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();
数据成员似乎在构造函数中具有合法值。但是,当我使用类似的功能时,即具有相同的可见性模式时,似乎会出现垃圾值。
答案 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;
。其他成员也一样。