【问题标题】:How to create objects for this issue?如何为此问题创建对象?
【发布时间】:2013-03-01 13:41:05
【问题描述】:

首先我想说我是初学者,我对这个问题做了一些研究

我创建了五个类superbasebase 和 3 个派生类:

class superbase
{


    QList<base*> listofbase;  //Composition relation between super base and base

    // some other attributes 

    public:

    superbase(); // or other overloaded constructor

};

class base
{
    int i;

    public:

    base();

};

class derived1 : // Which inheritance should be used with base
{
    int j;

    public:

    derived1();   // or other overloaded constructor

};

class derived2 : // Which inheritance should be used with base
{
    int k;

    public:

    derived2();   // or other overloaded constructor

};

class derived3: // Which inheritance should be used with base
{
    int l;

    public:

    derived3();   // or other overloaded constructor

};
  • superbasebase 有组合关系
  • derived1, derived2, derived3 仅继承自 base 不是 superbase
  • 类没有方法
  • 我也尝试过虚拟继承,但我没有正确理解它,因为到处有人提到“钻石问题”,但这不一样。

我的任务

  • 我应该创建base 类的多个对象作为superbase 类(QList&lt; base* &gt; listofbase;) 的私有属性。每个基类对象可以包含多个派生类对象(derived1derived2derived3)。

问题:

  1. 如何为派生类创建对象,以便所有派生类只共享一个基类对象的一个​​副本
  2. 必须在派生类中使用哪种继承才能仅生成基对象的单个副本?

【问题讨论】:

  • 为什么superbase 会出现在这里?您可以完全删除它,但仍然有同样的问题。
  • 另外,您的任务是否要求您使用继承?这似乎不是正确的方法。
  • 好吧,这个问题实际上是一个类图的实现.. 假设超基的名称是其他随机名称 A .. 在类 A 和 base 之间,存在组合关系 1-->1.. * 这就是为什么 superbase(A) 将 QList od 基指针作为私有属性。所以我不能省略 superbase(A) 类
  • 是的,我需要使用继承,因为在该类图中,派生的 1、派生 2 和派生 3 是从类基派生的……但我不确定哪个继承以及如何使用,以制作单个副本基类对象。
  • 我认为这是不可能的。有人告诉过你吗?

标签: c++ qt inheritance multiple-inheritance derived-class


【解决方案1】:

在基类中使用静态工厂和受保护的构造函数来实现。

【讨论】:

  • 好的,我会从静态工厂进行...但是应该使用哪个继承??????据我所知,假设 m 使用静态工厂,并且在创建第一个派生时,我正在创建一个基类对象......但是在创建其他派生对象时,如何使用 dat 一个且只有基类创建的对象来维护单个副本。 ...我应该对那个基类对象使用引用还是什么????
  • 您能详细说明一下吗?我看不出这如何满足要求。
  • @user2086832 原始要求是什么?可能对它有些误解
  • 类基{保护:base();公共:静态基础* getBaseObject(); };派生类:公共基础{ };
  • @shuiyu,@Beta .. 我的要求很简单.. 多个派生类对象,所有这些对象共享一个且只有一个基类对象.....@Adnan Akbar:谢谢..我可以看到这段代码的一些希望,但图片仍然不清楚..查看你的代码,这是否意味着首先我必须单独创建基对象,然后每个派生类对象将无法调用基构造函数,而只会得到现有基类副本的地址....是否正确?
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多