Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 超类函数可以访问子类数据成员吗_C++_Subclass_Superclass - Fatal编程技术网

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

C++ 超类函数可以访问子类数据成员吗,c++,subclass,superclass,C++,Subclass,Superclass,我知道通常不能,但我想知道是否有代码允许我在超类中有一个函数访问子类的成员。有四个子类,每个子类都有一个int size变量,对于这个函数,我需要size变量。我和一位老师谈过如何使用friend代码,但她说这行不通。可以在基类中创建一个纯虚拟函数,返回大小。然后可以在派生类中实现该函数,该函数将返回存储在派生类中的大小。这就是虚拟成员函数的用途: struct Base { virtual std::string child_name() = 0; }; struct Derive

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

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

这就是虚拟成员函数的用途:

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,则基类将变为“纯虚拟”且不可实例化,因此如果不希望出现这种行为,则必须定义默认实现,如果派生类未定义虚拟函数,也将使用默认实现


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

为什么该成员不在超类中?因为该成员的值根据其所在的子类而变化