【发布时间】:2011-05-30 11:15:33
【问题描述】:
如果一个类从多个抽象类继承,而其中的两个或多个抽象类具有相同名称、返回类型和参数的函数,会发生什么情况?
假设这里的所有函数都是虚拟的
谢谢
类C同时继承自A和B,A和B都有virtual void func(int h);
【问题讨论】:
-
C 是否包含 func() 的另一个实现?
标签: c++
如果一个类从多个抽象类继承,而其中的两个或多个抽象类具有相同名称、返回类型和参数的函数,会发生什么情况?
假设这里的所有函数都是虚拟的
谢谢
类C同时继承自A和B,A和B都有virtual void func(int h);
【问题讨论】:
标签: c++
如果这就是你的意思,
#include <iostream.h>
class A
{
public:
virtual void a_show()=0;
virtual void show()
{
cout<<"A";
}
};
class B
{
public:
virtual void b_show()=0;
virtual void show()
{
cout<<"B";
}
};
class C : public A, public B
{
virtual void a_show()
{}
virtual void b_show()
{}
};
void main()
{
C s;
s.show();
}
代码给VC++之类的错误
error C2385: 'C::show' is ambiguous
你需要这样声明:
#include <iostream.h>
class A
{
public:
virtual void a_show()=0;
virtual void show()
{
cout<<"A";
}
};
class B
{
public:
virtual void b_show()=0;
virtual void show()
{
cout<<"B";
}
};
class C : public A, public B
{
public:
virtual void a_show()
{}
virtual void b_show()
{}
void show()
{
cout<<"C";
}
};
void main()
{
C s;
s.show();
}
这肯定会给C
【讨论】:
C++ 还允许选择继承的虚拟成员函数 (IVMF),因此您无需覆盖 IVMF。借用 mihsathe 的例子,我们可以做到以下几点:
C类:公共A,公共B { 民众: 虚空 a_show() { } 虚空 b_show() { } 使用 B::show; // 使用 A:show; // 如果你想使用 A 中的 show() };【讨论】: