超类函数可以访问子类数据成员吗?

时间:2015-12-03 17:44:19

标签: c++ subclass superclass

我知道通常它不会,但我想知道是否有任何代码允许我在超类中有一个函数访问子类的成员。有四个子类,每个子类都有一个int size变量,对于函数我需要size变量。我和一位老师谈过使用朋友代码的方式,但她说那不行。

2 个答案:

答案 0 :(得分:2)

您可以在返回大小的基类中创建纯虚函数。然后,您可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。

答案 1 :(得分:0)

虚拟成员函数的用途:

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 ,则基类将变为"纯虚拟"并且不可实例化,因此如果您不想要这种行为,则必须定义一个默认实现,如果派生类没有定义虚函数,也将使用该实现。

重要:不应在构造函数中调用虚函数,否则您将收到异常(如果函数是纯虚函数)或不期望的行为(将调用默认实现) )。