【问题标题】:Can a superclass function access a subclass data-member超类函数可以访问子类数据成员吗
【发布时间】:2016-03-08 11:10:18
【问题描述】:
我知道通常它不能,但我想知道是否有任何代码允许我在超类中的函数访问子类的成员。有四个子类,每个子类都有一个 int 大小变量,对于函数,我需要 size 变量。我和一位老师谈过以某种方式使用朋友代码,但她说那行不通。
【问题讨论】:
标签:
c++
subclass
superclass
【解决方案1】:
您可以在返回大小的基类中创建一个纯虚函数。然后您可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。
【解决方案2】:
这就是虚成员函数的用途:
struct Base {
virtual std::string child_name() = 0;
};
struct Derived1 {
virtual std::string child_name { return "Derived1"; }
};
struct Derived2 {
virtual std::string child_name { return "Derived2"; }
};
请注意,如果您在基类中指定 = 0,您的基类将变为“纯虚拟”且不可实例化,因此如果您不希望这种行为,则必须定义一个默认实现,如果派生类没有定义虚函数,也会使用它。
重要提示:不应在构造函数中调用虚函数,否则您将收到异常(如果函数是纯虚函数)或不良行为(将调用默认实现)。