2015-04-04 145 views
1

Excerpt from here:构造继承在C++

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

  1. 是否构造创建新的对象,或者当对象被称为 构造立即叫什么名字?

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


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甲称为

CONST乙称为

站Dest乙称为

站Dest一个CA大会另作

+1

定义构造函数与'A'参数,然后看看'B'继承了带有参数的构造函数。 – molbdnilo 2015-04-04 13:58:46

+0

这是一个非常误导的帖子,根据来自未在非常高的方面为C++知识源举行了一本书一个非常误导的报价。你应该简单地忽略它。派生类继承其基地的所有成员。 – juanchopanza 2015-04-04 13:59:17

+0

C++ 11及更高版本支持构造函数继承,所以**前提是不正确**。 – 2015-04-04 14:39:35

回答

1

派生类D没有在这个意义上继承B一个构造函数,指定没有明确D构造,我可以用我的B(int)想构建一个new D(1);

然而,我所能做的是在派生类的构造函数的定义中使用的基类的构造函数,像D::D(void) : B(1) {}

那么抽象,假设我有Person一个构造函数一个gender参数,我可能希望创建一个:

class Son: Person{ 
public: 
    Son(void) : Person(male) {}; 
}; 

构建Son,这显然是一个Person,但肯定不会需要参数gender

在暗示D::~D(){}的最后一个括号的意义上暗示了析构函数是“继承的”。