当前位置: 首页 > 知识库问答 >
问题:

实现层次结构中的冗余私有成员数据复制

松刚豪
2023-03-14
#include<iostream>

using std::cout;
using std::endl;

class MathOps {
public:
  virtual int add(int x) = 0;
  virtual int subtr(int x) = 0;
};

class MathOps_Impl : public virtual MathOps {
private:
  int m_y;
public:
  MathOps_Impl(int y) : m_y(y) {
    cout << "MathOps_Impl initialized with value: " << m_y << endl;
  }

  virtual int add(int x) { return x + m_y;}
  virtual int subtr (int x) { return m_y - x;}
};

class MathOps_Extn  : public virtual MathOps {
  // Extends MathOps by adding mult() and div()                                                                                                                                 
public:
  virtual int mult(int x) = 0;
  virtual int div(int x) = 0;
};

class MathOps_Extn_Impl : public    virtual MathOps_Extn, private MathOps_Impl {
private:
  int m_y; // Have to replicate member data m_y here.                                                                                                                           
public:
  MathOps_Extn_Impl(int y) : MathOps_Impl(y), m_y(y) {
    cout << "MathOps_Extn_Impl initialized with value: " << m_y << endl;
  }

  virtual int mult(int x) {
    return x * m_y;
  }
  virtual int div(int x) {
    int quotient = x == 0? 0 : m_y/x;
    return quotient;
  }
};

int main() {                                                                                                                                           
  MathOps_Extn* B =  new MathOps_Extn_Impl(10);
  cout << "add 20: " << B->add(20) << endl;
  cout << "subtr 20: " << B->subtr(20) << endl;
  cout << "mult 2: " << B->mult(2) << endl;
  cout << "div 5: " << B->div(5) << endl;

注意Mathops_extn_impl中的M_Y复制。有没有办法避免这种复制?

共有1个答案

燕扬
2023-03-14

注意mathops_extn_impl中m_y的复制。有没有办法避免这种复制?

是的。授予Mathops_impl::m_yprotected访问权限,而不是private

您明确地询问为什么派生类不能访问私有数据。那是故意的。

 类似资料:
  • 我们正在进行一场关于如何设计RESTendpoint的辩论。基本上可以归结为这个做作的例子。 假设我们有: 其中演员A是同一个演员。 这种分歧最终源于使用ember.js,它期望有一个特定的层次结构--不希望有多种方式来访问相同的数据(最终,这将真正导致少量的代码重复)。可以将ember.js映射为使用/actors/a,因此没有严格的技术限制,这实际上更多地是一个哲学问题。 我环顾四周,找不到任

  • 问题内容: 有人可以给我一个SQL查询来帮助我清理此表吗?在清除locid(索引)后,应该重新设置,这是使用此查询的县城 。当我通过phpmyadmin的导入多次导入sql文本时,就会出现这种冗余数据,这就是结果, 问题答案: 在表位置添加唯一索引,这样就不会插入重复的记录 这将自动从表中删除重复的记录,对于以后的插入查询,您需要使用子句来避免出现重复的错误。 但正如注释中所建议的那样,它可能不适

  • 问题内容: 我有一个包含分层数据的表。 列“ ParentId”保存其父级的ID(“ ID”-关键列)。 删除一行时,我要删除所有子级(所有级别的嵌套)。 怎么做? 谢谢 问题答案: 当行数不太大时,erikkallen的递归方法起作用。 这是使用临时表收集所有子项的替代方法: 它从带有@delete_id的行开始,然后从那里开始。where语句用于防止递归;如果您确定没有任何内容,则可以将其忽略

  • 问题内容: Hibernate会生成包含所有列的语句,无论我是否更改了这些列中的值,例如: 发表以下声明: 因此B,C,D列已更新,而我没有更改它们。 说,项目会经常更新,并且所有列都已建立索引。 问题是:将Hibernate部分优化为如下所示是否有意义: 最让我困惑的是,“未优化”和“优化”查询版本的计划是相同的! 问题答案: 由于PostgreSQL MVCC,an 实际上更像是plus 。除

  • Singleton设计模式说我们应该在“single instance”类中定义一个私有静态属性。但是,没有适当的解释为什么数据成员必须是私有静态的。如果数据成员只是私有的,会有什么不同吗? 在以下代码中: 如果数据成员不是静态的,会有什么不同吗? 编辑:通过公开析构函数,它会改变单例设计的属性吗?

  • 我想枢轴的数据帧像: 进入具有如下分层列的数据帧: 我尝试了,但它只会给我一个这样的框架: 如何更改列的层次结构?