【发布时间】:2017-11-28 21:33:40
【问题描述】:
我有一个小问题。我有这些课程:
class Virus
{
private:
char* DNA;
int resistance;
};
class FluVirus : public Virus
{
private:
char* type;
};
class HIVVirus : public Virus
{
private:
int* undefinedBehavior;
};
场景是我有类 Patient。患者已感染病毒。有时,病毒会自我复制并使患者变得更弱。所以它可以成为新的目标病毒,初始变量与父病毒相同。 (无关的事情是obj患者可以使用药物降低固定数量的病毒强度,在全部死亡后恢复正常)
现在,我想创建派生类和基类的复制构造函数。问题是:
如果基类即Virus的指针变量(动态分配的数据)是public的,有人说它违反了封装性。
如果指针变量被保护,派生类可以访问它,但还是违反了封装性。
-
如果指针变量是私有的,但基类具有受保护的 getter 和 setter 方法,他们会说“Getter 和 setter 是您的类没有以有用的方式设计的标志”。
李>
那么,如果我需要一个拷贝构造函数,我是否违反了封装,我的设计有很大的问题?
是否有任何可用的解决方案可以在不违反这些问题的情况下在派生类中创建复制构造函数?
澄清一下,如果我想让外人不知道病毒的 DNA,我需要保密。如果我将其设为受保护,则某人或我可以创建一个派生自 Virus 的类,并复制和更改病毒的信息 (DNA)。他们说这违反了封装,因为我做了一个后门来泄露信息。
如果我不使 DNA 受到保护,并且我想复制,我无法复制,因为派生类对基类的访问被拒绝。那么,是否有任何可能的解决方案可以避免受保护但仍然可以制作副本?
【问题讨论】:
-
是否要将基类的数据复制到派生类的数据中?
-
你的意思是派生类?
-
是的,我想从其他派生类中复制一个派生类,但只有基变量相同时它们才相同。
-
那为什么不在派生类的拷贝构造函数中调用基类的拷贝构造函数呢?
-
还有一个问题:为什么你认为派生类可以访问m_base(受保护的成员)是违反封装的?
标签: c++ pointers getter-setter