从派生类的 setvalue 函数设置基类成员的值

问题描述 投票:0回答:2

我从 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;
}

我尝试运行上面的测试用例,但无法获得预期的输出。

c++ rcpp
2个回答
0
投票

问题是函数参数名称“a”隐藏了名称“a”是基类。所以

setvalue
中的赋值只是将函数参数赋值给它自己。

您的选择是:

  1. Base::a
    重命名为
    Base::m_a
    。如果
    m_a
    看起来不太好,请选择任何其他编码风格约定。
    void setvalue(int a)
    {
        m_a = a;
    }
  1. 将函数参数重命名为
    arg
    void setvalue(int arg)
    {
        a = arg;
    }
  1. 在类成员访问前面加上
    this->
    。这种语法在模板中最有用。
    void setvalue(int a)
    {
        this->a = a;
    }

0
投票

setvalue
不会将
a
分配给
this->a
。它将函数参数
a
分配给自己。要么使用
this->a = a;
要么更好,不要隐藏成员变量并给函数参数一个不同的名称:

void setvalue(int arg) {
    a = arg;
}
© www.soinside.com 2019 - 2024. All rights reserved.