用c ++继承的构造函数

时间:2015-04-04 13:54:07

标签: c++ inheritance constructor

Excerpt from here:

  

构造函数与其他类方法的不同之处在于它们创建新对象,而其他方法则由现有对象调用。这是构造函数不被继承的一个原因。继承意味着派生对象可以使用基类方法,但是在构造函数的情况下,该对象在构造函数完成其工作之后才会存在。

  1. 构造函数是创建新对象还是调用对象时 构造函数立即被调用?

  2. 据说构造函数和析构函数不是继承的 从基类到派生类,但是下面是一个程序 矛盾,我们正在创建派生类的对象,但它 输出基类的构造函数和析构函数吗?


  3. class A{
    public:
        A(){
            cout<< Const A called<<endl;
        }
        ~A(){
            cout<< Dest A called <<endl;
        }
    };
    
    Class B : public A{
    public:
        B(){
            cout<< Const B called <<endl;
        }
        ~B(){
            cout<< Dest B called <<endl;
        }
    };
    
    int main(){
        B obj;
        return 0;
    }
    

    输出:

      

    Const A叫

         

    Const B叫

         

    Dest B叫

         

    Dest A called

1 个答案:

答案 0 :(得分:1)

派生类D不会从B继承构造函数,因为没有指定明确的D构造函数,我可以使用B(int)来构造{ {1}}。

但是,我能做的是在派生类构造函数的定义中使用基类构造函数,如new D(1);

不太抽象,假设我有D::D(void) : B(1) {}的构造函数,它带有Person参数,我可能希望创建一个:

gender

构建class Son: Person{ public: Son(void) : Person(male) {}; }; ,显然是Son,但肯定不需要参数化Person

析构函数是“继承的”,因为在gender的结束时隐含了对D::~D(){}的调用。