c++ - protected 数据成员的 protected 获取函数?

标签 c++ class inheritance

我们有两个类(class)(A 和 B)。 A类只能由继承它的类创建(A类) B 类可以由用户创建。

A 类,版本 1 有一个private 数据成员,并且有方法访问 A 类中的数据。

A 类,版本 2 有一个protected 数据成员,因此,从该类继承的类不需要任何方法来访问 A 类中的数据

A 类,版本 1

class A
{
protected:
   A() = default;

   void set_data( T d );
   T& get_data();
private:
   T data;  
}

A 类,版本 2

class A
{
protected:
   A() = default;

   T data;  
}

B 级

class B : public A {}

哪个版本的 A 类是首选?

最佳答案

这是相当主观的,但我会说 95% 的情况下两者都不是。 protected 数据使您的代码与公开的代码一样难以维护,因此我们立即排除该版本。但是您几乎永远不需要直接的修改器(设置)函数,因此我们将砍掉该函数,然后将 get 函数的签名更改为 const T& get_data() const;。然后我们将向父级添加一个真实接口(interface)来操纵其状态,而不是让外部的东西决定新状态应该是什么。

关于c++ - protected 数据成员的 protected 获取函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823381/

相关文章:

c++ - 功能相同的代码,不同的结果

c++ - clang 3.4 C++14 支持

java - 如果我尝试将数组作为参数传递到不同的公共(public)类中,为什么我的构造函数无法在 Java 中编译?

c++ - 继承,错误前的预期类型说明符

Javascript - 从函数内部设置原型(prototype)

c++ - 编译器在乘以子类型时选择了错误的运算符*

c++ - 在静态函数中初始化静态变量导致未解决

c++ - 如何将 GUI C++ 应用程序转换为控制台应用程序?

python - 为什么 Python 中的数据类需要重写

java - 无法解析或不是字段(处理中)