Рассмотрим программу:Понимание базовой инициализации класса
#include<iostream>
#include<vector>
struct A
{
int a;
A(int) { }
virtual int foo(){ std::cout << "base" << std::endl; return 5; }
};
struct B : A
{
int b;
B(): b(9), A(foo()) { }
virtual int foo(){ std::cout << "derived" << std::endl; return 6; }
};
B b; //prints derived
int main(){ }
Что Скотт Мейерс в своем Effective C++
сказал о том, что было:
Во время базового класса строительства производного класса объект, тип объект является базовым классом.
Итак, я ожидал base
для печати вместо этого, потому что мы были под классом строительства базового класса при вызове функции foo
. Что я упустил? Может, это UB? Если да, пожалуйста, укажите мне соответствующий раздел.
Так что это не UB, не так ли? –
@ St.Antario, обновлено – ixSci
Интересно. Итак, если мы хотим вызвать функцию-член из ctor, мы должны объявить его статическим, верно? –