2015-04-04 2 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 СА заполненный

+1

Определите конструктор с параметром в 'A', затем посмотрите, унаследовал ли' B' конструктор с параметром. – molbdnilo

+0

Это очень вводящий в заблуждение пост, основанный на очень вводящей в заблуждение цитате из книги, которая не очень ценится как источник знаний на С ++. Вы должны просто игнорировать все это. Производные классы наследуют всех членов от их базы. – juanchopanza

+0

C++ 11 и более поздних версий наследование конструктора, поэтому ** предпосылка неверна **. –

ответ

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(){} подразумевается звонок ~B().

Смежные вопросы