Вы правы, говоря, что реальный объект Rectangle не передан, просто ссылка на него. На самом деле вы никогда не сможете «передать» какой-либо объект или что-либо еще на самом деле. Вы можете только «передать» копию чего-либо в качестве параметра функции.
То, что вы можете передать, может быть копией значения, например int
, или копией объекта, или копией указателя или ссылки. Поэтому, на мой взгляд, передача копии либо указателя, либо ссылки - это логически одно и то же - синтаксически он другой, следовательно, параметр является либо rect
, либо *rectTwo
.
Ссылки в C ++ являются явным преимуществом перед C, поскольку они позволяют программисту объявлять и определять операторы, которые синтаксически выглядят идентично тем, которые доступны для целых чисел.
например. форма: a=b+c
может использоваться для int
с или Rectangle
с.
Вот почему вы можете иметь changestuff(rect);
, поскольку параметр является ссылкой, а ссылка на (указатель на) прямоугольника берется автоматически. Когда у вас есть указатель Rectangle* rectTwo;
, он сам по себе является «объектом», и вы можете работать с ним, например, переназначать или увеличивать его. C ++ решил не преобразовывать это в ссылку на объект, вы должны сделать это вручную, разыменовав указатель, чтобы добраться до объекта, который затем автоматически преобразуется в ссылку. Вот что означает *rectTwo
: разыменование указателя.
Итак, rectTwo
- это указатель на Rectangle
, но rect
- это прямоугольник или ссылка на Rectangle
.