gpt4 book ai didi

c++ - 从派生类之一调用基方法

转载 作者:行者123 更新时间:2023-11-28 06:07:50 27 4
gpt4 key购买 nike

我有以下类层次结构:

class A
{
public:
virtual void func()
{
cout<<"A"<<endl;
}
};

class B: public A
{};

class C: public B
{
public:
virtual void func()
{
cout<<"C"<<endl;
}
};

class D: public C
{
public:
virtual void func()
{
//I don't want to use the class C's implementation
//So I should call the next base function: B::func()
//But since B does not re-define the virtual function, we might as well
//directly call A::func()
//But what is the correct practice? Call A::func() directly or call B::func()

//A::func();
//B::func();
}
};

int main()
{
A *ob;
D dob;

ob = &dob; ob->func();
return 0;
}

我不想使用 C 类的实现所以我应该调用下一个基本函数:B::func()但是既然B没有重新定义虚函数,我们还不如直接调用A::func()但是什么是正确的做法呢?直接调用 A::func() 或调用 B::func()

最佳答案

没有真正的区别,因为 B 结构包含 A::func() 本身的拷贝 - 当派生不覆盖父类实现时,函数被复制。但是,我相信再次将 C 对象从 B 转换回 A 的效率会降低,因此我相信 B::func() 是两者中更好的方法。

关于c++ - 从派生类之一调用基方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019455/

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