Bin*_*ngo 7 c++ multiple-inheritance
我要做的是开发两个不同的基类,这些基类不应该在一个派生类中一起继承.有什么办法可以在编译时强制执行吗?
class Base1 {};
class Base2 {};
class Derived1 : public Base1 {} // OK!
class Derived2 : public Base2, public Other {} // OK!
class Derived3 : public Base1, Base2 {} // Can I force the compiler to complain?
Derived1 d1; // OK!
Derived2 d2; // OK!
Derived3 d3; // Or can I force the compiler to complain here?
Run Code Online (Sandbox Code Playgroud)
我知道文档是一个好主意,只是想知道它是否可行.
您正在Base1和Base2之间建立某种耦合,因为它们不能同时派生.
您可以使它们都从Base0派生,在这种情况下,如果您从Base1和Base2派生,您将获得多继承菱形,因此如果您不使用虚拟继承并且不解决重复,则会出现编译器错误.
这可能会解决您的问题,但我怀疑您为什么要这样做.
(Base0不应该是一个完全空的类,因为必须有一些不明确的东西导致编译器抱怨.当然你可以解决它,所以它不会完全阻止你从两者得到,只是它会产生所需的编译器"错误"如果你误做了).
一个例子可能是:
class Base0
{
protected:
virtual ~Base0(){};
virtual void abstractMethod() const = 0;
};
class Base1 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Base2 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Derived : public Base1, public Base2
{
// if I don't resolve abstractMethod it is ambiguous and the compiler will let me know
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
842 次 |
| 最近记录: |