Size: a a a

2021 June 29

НХ

Никита Хмель... in supapro.cxx
Всем привет.
Как понять следующий код? Я знаю, что амперсанд возвращает адрес памяти, а *& используется для его разыменования. Но что происходит здесь? Я даже не знаю как загуглить.

Child child;
Parent &rParent = child;

почему не просто Parent rParent = child; ?
код взят с учбеника, тема полиморфизма

фулл код: https://godbolt.org/z/4W9o3eq3E
источник

d

disba1ancer in supapro.cxx
в данном случае объявлена ссылка
источник

DP

Denis Paukaev in supapro.cxx
Почитай про ссылки
источник

НХ

Никита Хмель... in supapro.cxx
да я читал, там вообще тупо приведены примеры типа
short value = 7; // &value = 0012FF60
short otherValue = 3; // &otherValue = 0012FF54

short *ptr = &value;

std::cout << &value << '\n';
std::cout << value << '\n';
std::cout << ptr << '\n';
std::cout << *ptr << '\n';
std::cout << '\n';

*ptr = 9;


и это не капли мне не объясняет то, что выше
источник

DP

Denis Paukaev in supapro.cxx
Ну так читай там где нормально описано, благо есть интернет и куча литературы
источник

НХ

Никита Хмель... in supapro.cxx
ну я не знаю где еще об этом прочитать, это точно чат для новичков?
источник

DP

Denis Paukaev in supapro.cxx
Для новичков умеющих читать
источник

DP

Denis Paukaev in supapro.cxx
источник

НХ

Никита Хмель... in supapro.cxx
я понимаю, что такое ссылка, я не понимаю почему
Parent &rParent = child;
а не просто Parent rParent = child;
зачем здесь делать ссылку? как вообще понять когда нужно делать ссылку, а когда нет?
источник

НХ

Никита Хмель... in supapro.cxx
в другом чате мне сказали, что это как-то связанно со сборщиком мусора (хотя хз)
источник

DP

Denis Paukaev in supapro.cxx
Потому что это пример про полиморфизм
источник

DP

Denis Paukaev in supapro.cxx
Без ссылки будет срезка и кусок объекта просто выкинут при присваивании
источник

AS

Anatoly Shirokov in supapro.cxx
Давай все же ты почитаешь.
источник

DP

Denis Paukaev in supapro.cxx
лучше конечно давать пример с функцией и параметром, мне кажется там понятнее

struct Pet {
 virtual void Voice() const = 0;
};

struct Cat: Pet {
 void Voice() const final {
   std::cout << "meow\n";
 }
};

void func(const Pet& pet) {
 pet.Voice();
}

int main() {
 Cat cat;
 func(cat);
}
источник

TS

Till Schneider in supapro.cxx
прости, а из какого учебника взят код?
источник

AS

Anatoly Shirokov in supapro.cxx
Отцы и дети
источник

TS

Till Schneider in supapro.cxx
мой нубский взгляд почему-то не хочет видеть в том коде какой-либо полиморфизм, подправь, если я не прав
источник

DP

Denis Paukaev in supapro.cxx
Он такой же как в моем примере
источник

TS

Till Schneider in supapro.cxx
в твоем примере полиморфизм вижу
источник

DP

Denis Paukaev in supapro.cxx
Так я просто переписал немного ) для наглядности, на самом деле если убрать функцию то то же самое будет
источник