c++多重继承的父类虚函数表的虚函数重复如何体现
时间: 2023-08-14 14:03:40 浏览: 144
在C++中,如果一个派生类继承了多个基类,且这些基类中都有相同的虚函数,那么派生类会有多个指向这些虚函数的指针,每个指针指向一个不同的虚函数表。
当派生类对象调用这个重复的虚函数时,编译器会根据该对象的类型和虚函数的访问权限来选择使用哪个基类的虚函数表。如果使用的是第一个基类的虚函数表,则该函数的行为与该基类中的虚函数相同;如果使用的是第二个基类的虚函数表,则该函数的行为与该基类中的虚函数相同,以此类推。
下面是一个简单的例子,演示了这种情况:
```c++
#include <iostream>
class A {
public:
virtual void foo() { std::cout << "A::foo()" << std::endl; }
};
class B {
public:
virtual void foo() { std::cout << "B::foo()" << std::endl; }
};
class C : public A, public B {
public:
// 重载虚函数
virtual void foo() { std::cout << "C::foo()" << std::endl; }
};
int main() {
C c;
// 调用C类自身的foo()函数
c.foo();
// 显示调用A类的foo()函数
c.A::foo();
// 显示调用B类的foo()函数
c.B::foo();
return 0;
}
```
输出结果为:
```
C::foo()
A::foo()
B::foo()
```
可以看到,当调用`c.foo()`时,使用的是C类自身的虚函数表,所以输出了"C::foo()";当使用`c.A::foo()`时,使用的是A类的虚函数表,所以输出了"A::foo()";当使用`c.B::foo()`时,使用的是B类的虚函数表,所以输出了"B::foo()"。
阅读全文