Хорошо, я не говорю, что это именно то, почему объекты являются ссылочными типами или передаются по ссылке, но я могу привести вам пример того, почему это очень хорошая идея в долгосрочной перспективе.
Если я не ошибаюсь, когда вы наследуете класс в C ++, все методы и свойства этого класса физически копируются в дочерний класс. Это было бы как писать содержимое этого класса снова внутри дочернего класса.
Таким образом, это означает, что общий размер данных в вашем дочернем классе является комбинацией материала в родительском классе и производном классе.
EG: #include
class Top
{
int arrTop[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
class Middle : Top
{
int arrMiddle[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
class Bottom : Middle
{
int arrBottom[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
int main()
{
using namespace std;
int arr[20];
cout << "Size of array of 20 ints: " << sizeof(arr) << endl;
Top top;
Middle middle;
Bottom bottom;
cout << "Size of Top Class: " << sizeof(top) << endl;
cout << "Size of middle Class: " << sizeof(middle) << endl;
cout << "Size of bottom Class: " << sizeof(bottom) << endl;
}
Который покажет вам:
Size of array of 20 ints: 80
Size of Top Class: 80
Size of middle Class: 160
Size of bottom Class: 240
Это означает, что если у вас есть большая иерархия из нескольких классов, общий размер объекта, как заявлено здесь, будет комбинацией всех этих классов. Очевидно, что эти объекты были бы значительно большими во многих случаях.
Решение, я считаю, состоит в том, чтобы создать его в куче и использовать указатели. Это означает, что размер объектов классов с несколькими родителями будет в некотором смысле управляемым.
Вот почему использование ссылок было бы более предпочтительным методом для этого.