c++ - 我必须将数据设为私有(private)吗?

标签 c++ coding-style private public

我知道类中的数据应该是私有(private)的,然后使用 getter 和 setter 来读取/修改它们。但是比起直接使用student.scores.push_back(100)省了一个成员函数是不是很麻烦。

class Student {
public:

    void addToScores(int inScore) {

        scores.push_back(inScore);
    }

private:

    vector<int> scores;
}

简而言之,我很好奇人们实际上在做什么,总是使用 getter 和 setter 严格私有(private)数据?

最佳答案

成员函数的目的是公开接口(interface)。无需创建 getter 和 setter 或其他琐碎的函数,只需将成员已经实现的接口(interface)移动到聚合容器对象。

如果应该允许 Student 的客户端随心所欲地操作 scores,您应该将 scores 设为公共(public)成员并访问它简单的方法。如果它应该是一个只有 pushpoptop 的堆栈,那么使用 std::stack接口(interface)适配器。如果只允许 push_back,那么您可以实现 addToScores。但是,如果唯一的客户是您,并且您不担心 std::vector 接口(interface)的其他部分被滥用,那么实现一个新接口(interface)真的没有意义。

程序中的每个界面都应该经过深思熟虑的设计。添加 slapdash 接口(interface)作为一种习惯,因为标准接口(interface)(包括 C++ 默认赋值运算符)是“危险的”不一定是一个好习惯。

关于c++ - 我必须将数据设为私有(private)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15984292/

相关文章:

c++ - 在 Internet Explorer 中检测 DOM 修改

objective-c - 压缩代码有什么好处吗?

c++ - 在哪里声明结构等?

c# - 通过引用传递 : Which is more readable/right?

php - 如何在 PHP 的静态函数中访问私有(private)成员

java - Java 中没有 setter 方法可以访问私有(private)数据字段吗?

c++ - 两个字符串之间的数学运算

c++ - 在 Windows 下使用 system() 命令的问题

c++ - C++ 20 [[no_unique_address]]在GCC中的错误?

objective-c - Objective-C : where to declare private instance properties?