C++ 超类函数可以访问子类数据成员吗
我知道通常不能,但我想知道是否有代码允许我在超类中有一个函数访问子类的成员。有四个子类,每个子类都有一个int size变量,对于这个函数,我需要size变量。我和一位老师谈过如何使用friend代码,但她说这行不通。可以在基类中创建一个纯虚拟函数,返回大小。然后可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。这就是虚拟成员函数的用途:C++ 超类函数可以访问子类数据成员吗,c++,subclass,superclass,C++,Subclass,Superclass,我知道通常不能,但我想知道是否有代码允许我在超类中有一个函数访问子类的成员。有四个子类,每个子类都有一个int size变量,对于这个函数,我需要size变量。我和一位老师谈过如何使用friend代码,但她说这行不通。可以在基类中创建一个纯虚拟函数,返回大小。然后可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。这就是虚拟成员函数的用途: struct Base { virtual std::string child_name() = 0; }; struct Derive
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,则基类将变为“纯虚拟”且不可实例化,因此如果不希望出现这种行为,则必须定义默认实现,如果派生类未定义虚拟函数,也将使用默认实现
重要信息:不应在构造函数中调用虚拟函数,否则将收到异常(如果函数是纯虚拟的)或不需要的行为(将调用默认实现).为什么该成员不在超类中?因为该成员的值根据其所在的子类而变化