从使用派生 class 的成员函数的基 class 调用函数

Call a function from base class that uses the member functions of derived class

我创建了一个几乎完全相同的 class 和派生的 class。 唯一的区别是派生的 class 有 2 个不同的函数和 3 个额外的变量。我希望 class B 中的被调用函数使用继承的函数,但使用 class B 的 PrivFunctions。相反,在调用时,该函数使用他自己的 class、class A.

class A
{
protected:
double x,y,z;
Function() {
*do something using the member variables of class A and the member functions of class A* }

private:
double PrivFunction() {
*take in member variables from A and return a certain value* }

double PrivFunction2() {
*take in member variables from A and return a certain value* }

class B : public A
{
private:
double a,b,c;

double PrivFunction() {
*take in member variables from A,B and return a certain value* }

double PrivFunction2() {
*take in member variables from A,B and return a certain value* }

main() {
B classb();
B.Function() 
}

我考虑过在 Function() 中添加私有函数的地址,但这似乎太牵强了。我觉得我遗漏了一些简单的东西,但我就是找不到如何巧妙地做到这一点

您需要做的是将基 class 中的函数声明为 virtual。这是一种你在baseclassA中定义的函数类型,然后需要在sub-classes中重新定义。将函数声明为 virtual 可确保调用正确的函数并避免歧义。

您的代码应如下所示:

class A
{
     protected:
     double x, y, z;
     //define as virtual
     virtual Function(){/*do something*/}

     /*
     rest of your code
     */
}
class B: public A
{
    private:
    double a, b, c

    public:
    //redefine your function in the subclass
    Function(){/*do something else*/}
    /*
    rest of your code
    */
}
int main()
{
    B classb();
    //This will now use B's Function
    classb.Function();
}