c++ - 对象组合与提供显式包装器

标签 c++ oop

我有一个 A 类,如下所示:

class A {
// A's internal state
public:
  void someMethod();
  void anotherMethod();
};

我想在另一个类 B 中使用 A。我不希望 B 成为 A 的子类型,但我希望 A 的公共(public)方法可以某种形式访问 B 的用户。

实现此目的的一种方法是简单地将 A 的实例作为 B 的公共(public)成员包含在内:

class B {
public:
  A a;
  // other members
};

另一种方法是让 A 成为 B 的私有(private)成员,并提供围绕 A 的公共(public)方法的包装器:

class B {
  A a;
public:
  void someMethod(){ a.someMethod(); }
  void anotherMethod(){ a.anotherMethod(); }
}

我想知道是否有一种“首选”方式来执行此操作(或者甚至可能不涉及上述两种选择),或者它是否只是一个偏好问题。谢谢。

最佳答案

另一种方法是:

class B : private A
{
public:
    using A::someMethod;
    using A::anotherMethod;
};

关于c++ - 对象组合与提供显式包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125890/

相关文章:

c++ - nvcc/cuda 3.1 - ghtr-default.h 泛滥 "declared static"但未定义警告

c++ - T*... 和 const T& 的部分排序

c++ - 从 Eigen 矩阵制作 Eigen vector 的标准 vector

c++ - 如何将 atomicAdd 应用于 CUDA 中数组的每个元素?

C++ 不接受对象字符串中的@ 符号?似乎是地址问题?

javascript - 特定祖先的访问方法

c++ - 将二进制文件读入 std::vector<bool>

c# - 遍历控件并使用函数

oop - 什么是好的 OOP 可视化教程?

java - 基于对象类重写java中的打印语句