我从 getvalue 函数的输出中得到垃圾。 C++中有没有类似java中super的机制。
#include<iostream>
using namespace std;
class Base
{
protected:
int a;
};
class Derived: public Base
{
public:
void setvalue(int a)
{
a = a;
}
int getvalue()
{
return a;
}
};
int main()
{
Derived d;
d.setvalue (23);
cout<<d.getvalue()<<endl;
}
我尝试运行上面的测试用例,但无法获得预期的输出。
问题是函数参数名称“a”隐藏了名称“a”是基类。所以
setvalue
中的赋值只是将函数参数赋值给它自己。
您的选择是:
Base::a
重命名为 Base::m_a
。如果 m_a
看起来不太好,请选择任何其他编码风格约定。 void setvalue(int a)
{
m_a = a;
}
arg
void setvalue(int arg)
{
a = arg;
}
this->
。这种语法在模板中最有用。 void setvalue(int a)
{
this->a = a;
}
setvalue
不会将 a
分配给 this->a
。它将函数参数 a
分配给自己。要么使用 this->a = a;
要么更好,不要隐藏成员变量并给函数参数一个不同的名称:
void setvalue(int arg) {
a = arg;
}