如何在继承类中再次使用虚拟函数
how to use a virtual function again in an inherited class
我有三个类,即
class A;
class B;
class C : public B {
};
现在我想在C
中使用一些成员函数,这些函数在A
中被虚拟化,在B
中被重写。当我试图从C
访问A
的成员时,它会给出一个错误,说C不是a的直接基类。
我该怎么办?我应该再写一次那段代码吗?
我搜索了其他网站,得到了混乱的答案,这破坏了我的继承概念,所以请给出一个描述性但清晰的答案
这就是你的意思吗?
class A {
public:
virtual int f() { return 42; }
};
class B : public A {
public:
int f() { return 0; }
};
class C : public B {
public:
int g() { return f(); }
};
没有什么特别的事情可做。
void C::f() { return A::f(); }
这还不够吗?
您的问题不是很清楚。您是否在询问如何调用A
或B
版本的函数?如果是这样的话,你可以这样做:
#include <iostream>
struct A
{
virtual void Foo () {
std::cout << "A::Foo()" "n" ;
}
};
struct B : public A
{
void Foo () {
std::cout << "B::Foo()" "n" ;
}
};
struct C : public B
{
void Foo () {
std::cout << "C::Foo()" "n" ;
}
};
int main (void)
{
C c ;
c.A::Foo () ;
c.B::Foo () ;
c.Foo () ;
A *p1 = &c ;
p1->Foo () ;
return 0 ;
}
输出:
A: :Foo()
B: :Foo()
C: :Foo()
C: :Foo()
我该怎么办?我应该再写一次那段代码吗?
您总是可以显式引用class A
中声明的方法,只要它们在您的继承保护范围中可见:
class A {
public:
virtual void foo() {}
};
class B : public A {
public:
virtual void foo() {
// do something else
}
};
class C : public B {
public:
virtual void foo() {
// use A's implementation again
A::foo();
}
};
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数