c++ 为什么我们不使用单个成员函数来设置和获取数据成员值,而不是使用单独的访问器/获取器和赋值器/设置器函数?

snz8szmq  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(119)

我只是有一个非常快速的问题,因为我试图掌握C++类的概念。为什么我们不使用一个单一的成员函数来设置和获得数据成员的值,而不是单独的访问器/getter和mutator/setter函数?
示例如下所示:

class Student
{
    private: 
            int rollno;
    public:     
            int setGetRollNo(int rn) {
                rollno = rn;
                return rollno;
            }
        
};

int main()
{   
    Student s1;
    cout << s1.setGetRollNo(123);

    
}

它的工作原理与我们尝试分离访问器和赋值函数时的工作原理相同。

8yparm6h

8yparm6h1#

拥有一个既可以访问成员又可以改变成员的函数并没有什么错。但是,您这样做的方式肯定是不正确的。使用您现在拥有的代码,如果不先将其设置为新值,就无法获得当前值。
相反,更好的方法是返回成员对象的引用:

class Student
{
    int rollno;
public:
    int& rollno_ref()
    {
        return rollno;
    }
};

现在,您可以使用相同的函数访问和修改成员,如下所示:

std::cout << student.rollno_ref();       // access
student.rollno_ref() = 10;               // mutate

需要注意的一点是,这个函数除了公开对现有成员的引用之外,并没有做太多的事情。要给它添加更多的功能,你应该查找代理类。
另一件需要注意的事情是这个函数在const Student上不起作用。要使它起作用,你应该提供它的const版本。

相关问题