用户定义的抽象类构造函数

时间:2015-06-11 11:14:57

标签: c++ inheritance constructor

我搜索了抽象类是否存在构造函数。我发现答案是肯定的,这些构造函数可以被派生类对象调用或使用。

抽象类的用户定义构造函数怎么样?

我们可以为抽象类编写或定义默认,参数化或复制构造函数吗?

2 个答案:

答案 0 :(得分:2)

  

抽象类的用户定义构造函数怎么样?

是,

  

我们可以为其编写或定义默认,参数化或复制构造函数   抽象类??

抽象类无法实例化,因为它意味着它是一个基类,你应该为它定义一个虚拟析构函数。

DEMO:http://coliru.stacked-crooked.com/a/a4b851e70667bb59

答案 1 :(得分:1)

通常在基类中包含受保护的构造函数:它们用于初始化类的私有变量。对于派生类的构造函数,它们被隐式或显式调用:

  • 隐式调用复制构造函数的默认值
  • 必须显式调用参数化构造函数

示例:

class Base {
    private int i;
public:
    Base(int val) {
        i = val;
    }
    virtual ~Base() { // always a virtual dtor in base class ...
    }
    // other methods ...
};
class Derived: public Base {
...
public:
    Derived(): Base(0) { // explicit call necessary because no default ctor in Base
        ...
    }
    ...
};

建议使用虚拟析构函数,因为它确保如果任何子类具有自定义析构函数,它将被调用。