【问题标题】:user defined constructor for an abstract class抽象类的用户定义构造函数
【发布时间】:2015-06-11 20:09:55
【问题描述】:

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

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

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

【问题讨论】:

  • afaik 不仅可以调用构造函数,而且任何派生类构造函数如果没有参数(无论超类是否抽象)都会自动调用超类构造函数

标签: c++ inheritance constructor


【解决方案1】:

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

是的,

我们是否可以编写或定义默认、参数化或复制构造函数 一个抽象类??

是的

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

演示:http://coliru.stacked-crooked.com/a/a4b851e70667bb59

【讨论】:

    【解决方案2】:

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

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

    例子:

    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
            ...
        }
        ...
    };
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2015-03-20
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多