Как указано здесь инициализация по умолчанию в вашем случае приведет к "неопределенным", то есть неопределенным значениям.
Компилятор предоставит вам конструктор по умолчанию, потому что вы не определили его самостоятельно и не определили другие конструкторы (в этом случае он будет удален), но конструктор по умолчанию все равно сделает значения членов неопределенными. Вы получали 0 и 1 - я получал числа, похожие на 1515788312
.
С помощью стандарта C ++ 11 вы можете предотвратить это, предоставив значения по умолчанию непосредственно в классе,
#include<iostream>
using namespace std;
class Class
{
public:
int a = 0, b = 0, c = 0;
};
int main()
{
Class obj;
cout<< obj.a << " "
<< obj.b << " " << obj.c << endl;
return 0;
}
В этом случае значения будут инициализированы так, как вам задано. Чтобы добиться того же, вы можете просто предоставить свой собственный конструктор по умолчанию,
#include<iostream>
using namespace std;
class Class
{
public:
Class() : a(1), b(2), c(3) { }
int a, b, c;
};
int main()
{
Class obj;
cout<< obj.a << " "
<< obj.b << " " << obj.c << endl;
return 0;
}
В качестве примечания, избегайте using namespace std
из-за возможных конфликтов имен. Вместо этого используйте отдельные операторы using
- для вещей, которые вы обычно используете, например cout
. Я немного изменил вашу программу для ясности. Кроме того, ответы на ваш вопрос можно найти хорошо объясненными в различных книгах по С ++, таких как «Учебник Липпмана», который я использовал