Я новичок в C++ и изучаю основы этого языка. Я прочитал эту строку в книге «Создание экземпляра объекта производного класса начинает цепочку вызовов конструктора». Может кто-нибудь объяснить, что означает это утверждение? Объяснений в книге не было. Пожалуйста помоги.
создание экземпляра объекта производного класса - C++
- Поставьте лайк этому. 25.04.2016
- можете пожалуйста объяснить простыми словами. Я не силен в программировании :( 25.04.2016
- @AjmalKhan: Возможно, вы захотите потратить еще немного времени на изучение, чтобы понять ответы. Вы всегда можете вернуться к этому позже. 25.04.2016
- Если A является дочерним элементом B, а B является дочерним элементом C, для создания экземпляра C вам потребуется создать A, затем B и, наконец, C. 25.04.2016
- почему вы помечаете С++ 11? 25.04.2016
- @Stefano: предположительно, ОП изучает С++ 11. 25.04.2016
Ответы:
Это означает, что если у вас есть базовый класс и производный класс:
struct A
{
A() { std::cout << "constructing A\n"; }
};
struct B : A
{
B() { std::cout << "constructing B\n"; }
};
затем создание экземпляра производного класса:
int main()
{
B b;
}
вызывает конструктор не только для производного класса, но и для базового класса:
constructing A
constructing B
и эта «цепочка» автоматически вызываемых конструкторов становится длиннее, чем больше у вас баз (т.е. чем глубже идет ваше дерево наследования).
Вы можете попробовать определить иерархию объектов и самостоятельно наблюдать за эффектами выполнения конструкторов. Вот надуманный пример:
#include <iostream>
struct A
{
A(int nValue) {
std::cout << "A: " << nValue << std::endl;
}
};
struct B: public A
{
B(int nValue, double dValue)
: A(nValue) {
std::cout << "B: " << dValue << std::endl;
}
};
struct C: public B
{
C(int nValue, double dValue, char chValue)
: B(nValue, dValue) {
std::cout << "C: " << chValue << std::endl;
}
};
int main()
{
C cClass(5, 4.3, 'R');
return 0;
}
Можете ли вы представить более сложные иерархии? Что происходит с другими типами конструкторов? А деструкторы?
Производный класс — это класс, который наследуется от другого класса. Я полагаю, вы немного знакомы с наследованием. Производный класс наследует конструктор базового класса, вам просто нужно его «переопределить». Поэтому, когда вы создаете экземпляр объекта из производного класса, сначала вызывается конструктор базового класса, а затем конструктор производного класса.
Чтобы создать экземпляр, вы создаете экземпляр. из них:
создавать экземпляр
...
(переходный) Представлять (что-то) конкретным экземпляром.
В языках на основе классов, таких как C++, у вас есть классы, которые действуют как чертежи, а затем у вас есть объекты, которые являются экземплярами определенных классов.
Например, допустим, у вас есть класс A
. Если вы затем объявите объект a
класса A
, вы создаете экземпляр объекта класса A
.