c++ - protected 继承与公共(public)继承和 OO 设计

标签 c++ oop

你什么时候使用每个继承?

class Base{};

class Derived: protected Base{};
class Derived2: public Base{};

我的案例:

我有一个名为 Snapshot 的类,它只包含 GetXXX 方法。它是一个轻量级的类,用于存储 Value 类的当前状态。我还使用它进行恢复,在 Value 类实例消失后很长时间内保留此类的实例。管理器类,处理快照类的实例。让我向您展示代码:

class Snapshot
{
        public:
            Snapshot (const Snapshot * snap)
            {
              _x=snap->_x;   
              _y=snap->_y;  
              _z=snap->_z;  
            }
            Snapshot (){_x=_y=_z=0;}
            int GetX(){return _x;}
            int GetY(){return _y;}
            int GetZ(){return _z;}
            ~virtual Snapshot(){} 

         protected: 
             int _x,_y,_z;               
};

class Value:public Snapshot 
{

 /*Very heavy class with a lot of components used to calculate _x, _y, _z*/


};


class Manager
{
       public:
         void Process( const Snapshot * snap)
         {

         }  
};

你觉得这个设计怎么样?有哪些替代方案?

谢谢

解决方案和问题

  • 解决方案:我将创建 makeSnapshot 函数,该函数将通过给定的 Value 对象返回 Snapshot 对象。

  • 问题:

    • 主要问题:我发送快照的频率非常高(每秒一次,甚至更少),因此我不想招致构建和销毁成本小问题:

    • 半主要问题我必须让 Value 成为 Snapshot 的 friend ,因为我不想
      介绍二传手。

最佳答案

关于private和protected继承的问题,可以在这里找到非常详尽的解释:

主要问题是语义——某物是某物,还是某物是某物的实现。

关于c++ - protected 继承与公共(public)继承和 OO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/643023/

相关文章:

c++ - C2059 : syntax e r r o r : ';'

c++ - 定义和调用类的转换运算符

c++ - 那么公共(public)变量有什么好处呢?

java - 要使用 REST API 需要实现什么设计模式?

java - 声明泛型类型时的编译器警告

c++ - boost ASIO 和 co_await- 与任何第三方回调一起使用?

c++ - 如何在汇编中传递参数?

c++ - 可变参数模板和复制构造函数

java - Guice - 使用两种不同的实现注入(inject)对象

excel - VBA 第一次创建类