gpt4 book ai didi

c++ - 在每个子 C++ 的特定函数调用上调用父函数

转载 作者:行者123 更新时间:2023-11-27 23:49:35 24 4
gpt4 key购买 nike

所以假设有一个函数为 foo 的类 A。
类 A 是几个都具有函数 foo 的类的父类。
所有的子类都需要的功能 A::foo 并在其上添加。
例如:

    class A
{
public:
void foo()
{
print('A');
}
};

class B:public A
{
public:
void foo()
{
print("B");
}
};
class C:public A
{
public:
void foo()
{
print("C");
}
};
void main()
{
B b;
C c;
c.foo()// now only goes to C::foo(), meaning print C. I want it to to also go into A::foo() meaning print AC
b.foo()//now only goes to B::foo(),meaning print B. want it to print AB
}

如果我想用 foo 函数添加 class D : A 它也会执行 A::foo() 然后 D::foo( )

抱歉,如果我遗漏了一些明显的东西。

编辑:由于不清楚,问题是是否有一种自动方法可以这样做。

编辑:找到解决方法:

    class A
{
virtual void foo2(){}
public:
void foo()
{
print('A');
foo2();
}

};

class B:public A
{
void foo2()
{
print("B");
}
public:
};
class C:public A
{
void foo2()
{
print("C");
}
public:
};
void main()
{
B b;
C c;
c.foo()// now prints AC
b.foo()//now prints AB
}

似乎是多余的,因为现在有 2 个函数。

最佳答案

您可以使用A::foo() 调用父类的函数实现。在您的情况下,只需添加该函数调用即可实现您想要的结果:

class B:public A
{
public:
void foo()
{
A::foo();
print("B");
}
};

作为旁注,无论何时您打算重写函数,您都应该将其声明为virtual:

 class A
{
public:
virtual void foo()
{
print('A');
}
};

然后在覆盖它时,使用 override 关键字:

class B:public A
{
public:
void foo() override
{
print("B");
}
};

关于c++ - 在每个子 C++ 的特定函数调用上调用父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com