this в конструкторе

 
0
 
C++
ava
neocpp | 16.02.2013, 09:12
День добрый.

Вопрос такой: можно ли использовать указатель this в конструкторе для доступа к элементам базового класса? Допустим:



class Child : public Base
{
public:
    Child()
    {
        std::cout << this->val << "\n";
    }
};


Как я понимаю, базовая часть объекта создана до выполнения тела конструктора и проблем с доступом быть не должно (проверял на практике, ошибок не было, предупреждений со стороны компилятора тоже). Или моя логика неверна и это, возможно, UB?
Ответы (4)
ava
bsa | 16.02.2013, 08:46 #
neocpp, твоя логика верна. Более того, в твоем случае даже this-> писать не надо - компилятор сам догадается.
ava
NoviceF | 16.02.2013, 08:56 #
Излагаю свою версию:

написать


        std::cout << this->val << "\n";


всёравно, что написать


        std::cout << val << "\n";


Если член val есть только в базовом классе и он не private, он будет выведен, т.к. базовый класс, является частью наследника.

Если член val находится в private области базового класса - он не выведется. Если в наследнике есть свой val - он перекроет член базового класса с таким же именем и выводиться будет его значение.

В общем this в конструкторе наследника, указывает на наследника, даже если наследник ещё полностью не сконструирован.
ava
neocpp | 16.02.2013, 11:53 #
Спасибо, это понял. На самом деле у меня пример немного другой, мне надо вызвать функцию и в нее передать *this, что-то вроде этого:


class Child : public Base
{
public:
    Child()
    {
         foo(*this);
    }
};


Где foo принимает ссылку на объект базового типа... С этим могут быть какие-нибудь проблемы?

Понимаю, какая-то кривая архитектура выходит. Просто мне нужно определенным образом проинициализировать базовую часть объекта, а в базовом классе нет подходящего конструктора. 
ava
mes | 16.02.2013, 17:00 #
Цитата (neocpp @  16.2.2013,  10:53 findReferencedText)
С этим могут быть какие-нибудь проблемы?

если косвенно вызываются виртуальные функции...
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  mes ava  bsa   NoviceF   neocpp
advanced
Отправить