2014-11-20 1 views
2

Обратите внимание, что вызов rect.area() не дает того же результата, что и вызов rectb.area(). Это связано с тем, что каждый объект класса Rectangle имеет свои собственные ширины и высоту переменных, поскольку они - в некотором роде - имеют также свои собственные члены функции set_value и область, которые работают с собственными переменными-членами объекта.У объектов есть разные члены функции или их доля?

Что это значит - в некотором роде - ?? означает, что члены функций разделяются между объектами класса?

ответ

1

Что это значит - в некотором роде - ?? означает ли это, что члены функций разделяются между объектами класса?

Да.

С «в некотором роде», автор, вероятно, намерен описать, что код разделяется, в то время как данные (переменные-члены) не является. Для каждого объекта переменные-члены уникальны, и методы получают указатель на данные объекта в качестве своего первого параметра (который не является частью списка параметров каждого метода, но неявно доступен внутри метода с помощью указателя this). С помощью этого указателя один и тот же (общий) код может работать с разными данными (разными экземплярами одного и того же класса).

Другие языки (такие как Python, где параметр называется self) требуют явно определить параметр для каждой функции-члена.

+0

сейчас я также понимаю, как это работает. Спасибо, сэр! – afgphoenix

1

Да, код функций для класса загружается только один раз в память, независимо от количества объектов этого класса. Таким образом, члены функции разделяются между объектами класса. (Возможно, утверждение в этой книге/сайте могло бы быть сформулировано лучше).

Таким образом, если вы вызываете rect.set_values (3, 4) или rectb.set_values (5, 6), это тот же код, который выполняется в памяти, хотя результаты могут отличаться, поскольку значения, с которыми они работают, различны (полученные параметры и/или значения элементов данных).

Смежные вопросы