C++ 从两个抽象类继承
我有一个问题,我还没有测试/编译,想知道这是否可能,是否是糟糕的设计 我的问题是: 我想要一个抽象基类A和一个抽象派生类B 我意识到如果这是可能的,我将在每个类中有许多纯虚拟成员函数,并且我将无法初始化这些对象,但这是抽象类的一个给定值 在我的设计中,我将有另一个派生类C,然后我将初始化它-类C将派生自类B 我会有这样的东西C++ 从两个抽象类继承,c++,C++,我有一个问题,我还没有测试/编译,想知道这是否可能,是否是糟糕的设计 我的问题是: 我想要一个抽象基类A和一个抽象派生类B 我意识到如果这是可能的,我将在每个类中有许多纯虚拟成员函数,并且我将无法初始化这些对象,但这是抽象类的一个给定值 在我的设计中,我将有另一个派生类C,然后我将初始化它-类C将派生自类B 我会有这样的东西 class C ^ | abstract class B ^ | abstract base class A 我的问题: 首先,这可能吗?我怀疑是这样,但
class C
^
|
abstract class B
^
|
abstract base class A
我的问题:
首先,这可能吗?我怀疑是这样,但不在类B中声明A中的纯虚函数可能会很麻烦
e、 十,
上面的可以吗
这是不是坏的C++设计?将来,我将从A派生类,所以有这样的设计会很好。
没有问题,它肯定会工作。下面是一个例子stefanos-imac:dftb borini$ more test.cpp
#include <iostream>
class A {
public:
A(void) { std::cout << "A" << std::endl; }
virtual void method1() = 0;
};
class B : public A {
public:
B(void) : A() { std::cout << "B" << std::endl; }
virtual void method2() = 0;
};
class C : public B {
public:
C(void) : B() { std::cout << "C" << std::endl; }
virtual void method1() { std::cout << "method1" << std::endl; }
virtual void method2() {std::cout << "method2" << std::endl; }
};
int main() {
C c;
c.method1();
c.method2();
}
stefanos-imac:dftb borini$ ./a.out
A
B
C
method1
method2
stefanos imac:dftborini$more test.cpp
#包括
甲级{
公众:
(void){std::cout关于“可能吗?”的问题:您在等待什么来尝试编译它?关于“它是糟糕的设计吗?”问题:我们不知道你所设计的东西是怎么回事。是的,很好。为什么这是一个糟糕的设计?比如动物,它的后裔哺乳动物都是抽象的,但是是进一步具体课程的好基础。我还没有写完它。-D加上我想考虑我是否正在做抽象类D。esign。你可以编写一个小原型(我想我可以用不到20行的篇幅)来测试你不确定的部分,而不是编写整个shebang。这正是我想看到的——下次我会在提问之前亲自测试它!干杯Stefano!@MWright:通常我们会对“没有研究成果”的问题投反对票,但由于您是该站点的新用户,因此我们没有对您进行访问。
stefanos-imac:dftb borini$ more test.cpp
#include <iostream>
class A {
public:
A(void) { std::cout << "A" << std::endl; }
virtual void method1() = 0;
};
class B : public A {
public:
B(void) : A() { std::cout << "B" << std::endl; }
virtual void method2() = 0;
};
class C : public B {
public:
C(void) : B() { std::cout << "C" << std::endl; }
virtual void method1() { std::cout << "method1" << std::endl; }
virtual void method2() {std::cout << "method2" << std::endl; }
};
int main() {
C c;
c.method1();
c.method2();
}
stefanos-imac:dftb borini$ ./a.out
A
B
C
method1
method2