У меня был неприятный опыт инициализации C ++, и я пытаюсь увидеть, есть ли пример из реальной жизни, который не оправдывает никаких предупреждений от компилятора.
Следующий код компилируется правильно, но foo и bar инициализируются значениями uninit (я полагаю из неинициализированного родительского класса). Компиляторы, как g ++, так и VS, не выдают никаких предупреждений.
Мне, конечно, сказали, что это плохое поведение - оставлять участников публичными и не украшать их. Тем не менее, я предполагаю, что компилятор может обнаружить такую несогласованность и, по крайней мере, выдать предупреждение на самых высоких уровнях предупреждения, потому что я не вижу никаких приложений такого рода кода.
#include <iostream>
using namespace std;
class base_class {
public:
int foo;
int bar;
base_class(int foo,int bar):
foo(foo),bar(bar)
{}
};
class derived_class: public base_class {
public:
derived_class(int Foo, int Bar):
base_class(foo,bar)
{
int a = Foo * Bar;
a++;
cout << foo << " " << bar << endl;
}
};
int main ()
{
derived_class *buzz = new derived_class(1,2);
buzz->print();
}