C ++抽象类和创建派生类

时间:2013-11-16 23:44:07

标签: c++ inheritance abstract-class override

1)我想创建一个抽象类,两个派生类可以继承所有抽象方法,而不必覆盖任何行为。这意味着我没有强制虚函数来强制子类提供。这是否意味着我无法创建一个抽象类(我知道我可以使用Java)?

2)我有点不确定如何创建派生类,考虑到我有一个抽象类的构造函数 - 但这个构造函数的目的是什么?我应该从任何地方明确地调用它吗?

3 个答案:

答案 0 :(得分:2)

是的,您仍然可以将其抽象化。惯用的事情是使析构函数纯粹虚拟。 (注意,尽管是纯虚拟的,你仍然需要为析构函数提供一个定义。)

E.g。

struct Base {
    virtual ~Base() = 0;

    virtual void fn1();
    virtual void fn2();
    // ...
};

如果要从派生类构造函数中调用非默认构造函数,则需要使用成员初始化列表。 E.g。

Derived::Derived() : Base(0, 1.5, "hello") {
}

如果您只是调用基类的默认构造函数,通常可以将其保留,并在构造任何派生类的实例时自动调用默认的基础构造函数。

答案 1 :(得分:1)

1)在C ++中,您不必将类定义为抽象或任何​​东西。您可以扩展所需的任何类,如果您不想覆盖函数行为,则甚至不必将方法标记为虚拟。如果它们是protectedpublic,则可以在派生类中访问它们。

2)在派生类的构造函数之前,将在没有您的命令的情况下调用基类的构造函数。

答案 2 :(得分:1)

1)将析构函数声明为纯虚拟:

virtual ~BaseClass() = 0;

2)您可以从派生类的构造函数初始化列表中调用它,但如果它是默认构造函数,则会自动调用它。记住 - 要初始化派生对象,必须首先初始化它的基类部分(在默认构造函数的情况下,通过调用基类的构造函数自动完成)。