C++ 在接口外部使用公共虚拟派生类
在这种情况下,我有两个类,一个接口和一个使用这两个类的实现C++ 在接口外部使用公共虚拟派生类,c++,c++14,C++,C++14,在这种情况下,我有两个类,一个接口和一个使用这两个类的实现 A类:公共虚拟接口 B类:公共虚拟接口 class B在内部使用class A,这是不允许的,因为class A是公共虚拟接口的派生类。我得到以下错误:错误:无法将变量“a”声明为抽象类型“a”有没有一种方法可以在不为a创建新类的情况下执行以下操作 class Interface { virtual void foo() = 0; virtual void bar() = 0; }; class A : public
A类:公共虚拟接口
B类:公共虚拟接口
class B
在内部使用class A
,这是不允许的,因为class A
是公共虚拟接口的派生类。我得到以下错误:错误:无法将变量“a”声明为抽象类型“a”
有没有一种方法可以在不为a
创建新类的情况下执行以下操作
class Interface
{
virtual void foo() = 0;
virtual void bar() = 0;
};
class A : public virtual Interface
{
public:
void foo(){ }
};
class B : public virtual Interface
{
public:
void bar()
{
A a;
}
};
class Implementation: public A, public B
{
public:
Implementation()
{
}
};
int main(){
Implementation impl;
return 0;
}
不,不能实例化A,因为它没有实现接口中的所有纯虚拟函数
以下内容适合我
class Interface
{
virtual void foo() = 0;
virtual void bar() = 0;
public:
virtual ~Interface() {}
};
class A : public virtual Interface
{
public:
void foo() override {}
void bar() override {}
};
class B : public virtual Interface
{
public:
void foo() override {}
void bar() override
{
A a;
}
};
class Implementation : public A, public B
{
public:
void foo() override { A::foo(); }
void bar() override { B::bar(); }
};
int main()
{
Implementation impl;
return 0;
}
不,不能实例化A,因为它没有实现接口中的所有纯虚拟函数
以下内容适合我
class Interface
{
virtual void foo() = 0;
virtual void bar() = 0;
public:
virtual ~Interface() {}
};
class A : public virtual Interface
{
public:
void foo() override {}
void bar() override {}
};
class B : public virtual Interface
{
public:
void foo() override {}
void bar() override
{
A a;
}
};
class Implementation : public A, public B
{
public:
void foo() override { A::foo(); }
void bar() override { B::bar(); }
};
int main()
{
Implementation impl;
return 0;
}
这是不允许的,因为
A
仍然具有纯虚拟函数(bar
)。。。这与它被“宣布为公共虚拟”无关。对于要实例化的A
。。。无论如何,它需要实现bar
类不是“声明的公共虚拟”,不存在这样的事情。这是不允许的,因为A
仍然具有纯虚拟功能(bar
)。。。这与它被“宣布为公共虚拟”无关。对于要实例化的A
。。。无论如何,它需要实现bar
类A不是“声明的公共虚拟的”,没有这样的事情。即使您将所有纯虚拟函数添加到类A
,您也会得到一个错误:没有唯一的最终重写器用于“implementation”中的“virtual void Interface::bar()”
我添加了一些适合我的代码。A
和B
都需要定义foo
和bar
。由于A
和B
都定义了foo
和bar
,实现也需要定义它们,否则它们将是不明确的。我只是随意选择了要使用的实现。即使您将所有纯虚拟函数添加到类A
,也会得到一个错误:在“implementation”中没有唯一的“virtual void Interface::bar()最终重写器
我添加了一些适合我的代码。A
和B
都需要定义foo
和bar
。由于A
和B
都定义了foo
和bar
,实现也需要定义它们,否则它们将是不明确的。我只是随意选择使用哪个实现。