Здравствуйте, blacksun, Вы писали:
B>Здравствуйте, 24, Вы писали:
24>>Здравствуйте, blacksun, Вы писали:
B>>>B()
B>>>{
B>>> m_x = 555;
B>>> A(777); // <--- Что происходит здесь? Почему не изменяется A::m_x, а изменятся какой-то другой m_x с другим адресом
B>>> //A::m_x = 888; // Здесь все ок
B>>>}
24>>Потому что это не вызов конструктора, а создание безымянного объекта типа А. Чтоб вызывался конструктор, нужно проинициализировать базовую часть:
24>>24>>B() : A(777)
24>>{
24>> ...
24>>}
24>>
B>Вот спасибо, теперь понятно.
B>А все же, может есть способ явно вызвать конструктор A() и из кода конструктора B() ? Например когда инициализировать A хочется не константой?
Понятно, что можно сделать как-то так:
class A
{
protected:
int m_x;
public:
A()
{
m_x = 111;
}
A(int i)
{
m_x = i;
}
void init()
{
m_x = 999;
}
};
class B : public A
{
public:
int m_x;
public:
B()
{
m_x = 555;
//A::m_x = 888;
init();
}
};
Но как насчет вызова конструктора? В чем его отличие от init() ?