При использовании классов должно быть нечто, называемое конструктором, который будет инициализировать класс.Таким образом, переменные этого класса устанавливаются и могут использоваться в функциях-членах.Конструктор не имеет возвращаемого типа (даже не void) и всегда именуется по имени класса.Так что в вашем случае код будет выглядеть примерно так:
calc<T> (int value)
{
x=value;
}
или
calc<T> (int value)
{
y=value;
}
В вашем первом примере кода программа вызывает конструктор по умолчанию, который создается для вас автоматическикомпилятором.Это выглядело бы примерно так:
calc<T> ()
{
//since there is nothing to assign. Do nothing.
}
Однако если бы вы вызывали конструктор по умолчанию во втором примере кода, значениям x и y было бы присвоено значение по умолчанию T для этого компилятора.
Теперь, когда у вас есть конструктор, элемент в этом объекте сохраняется.Таким образом, ax или ay будут равны значению, которое было отправлено в конструктор.(В вашем случае 1).