Сегодня в универе мы проходили инкапсуляцию и конструкторы. Из этой темы я не понял для чего нужны дружественные функции и почему вместо них нельзя использовать ссылку? В чём отличие между конструктором и параметризованным конструктором? Смотрел инфу в гугле, пересматривал лекцию, читал доп лит-ру, но не догоняю... Пмргите, объяснить это простыми словами
Первый это конструктор по умолчанию без аргументов (то есть все объекты будут одинаковы), второй конструктор с аргументами (объекты могут быть разными, зависит от того какие аргументы передал).
0xRD43SVT, То что они будут одинаковыми - не гарантировано, например каждый объект может генерировать себе случайный GUID или например хранить дату своего создания.
0xRD43SVT, Здесь не надо думать будет он это использовать или нет - здесь надо ответить в чём разница, например непараметризированный конструктор автоматически генерируется компилятором если не объявлены другие конструкторы. И для вызова непараметризированного конструктора не надо писать круглые скобки, а для параметризированного - надо: #include <iostream> using namespace std; struct MyType { int n; MyType(int n) : n(n) {} MyType() : n(42) {} }; int main() { MyType t1; MyType t2(1); cout << t1.n << endl; cout << t2.n << endl; return 0; } C #include <iostream> using namespace std; struct MyType { int n; MyType(int n) : n(n) {} MyType() : n(42) {} }; int main() { MyType t1; MyType t2(1); cout << t1.n << endl; cout << t2.n << endl; return 0; }
https://chat.openai.com/ считает: Дружественные функции в C++ используются для предоставления доступа к закрытым данным класса извне класса, т.е. для реализации функциональности, которая не может быть реализована через общедоступные методы класса или через наследование. Они объявляются с ключевым словом friend внутри класса, и имеют доступ ко всем закрытым членам класса. Ссылки используются для передачи аргументов в функцию по ссылке, что может повысить производительность и избежать копирования больших объектов. Однако, ссылки не могут быть использованы для предоставления доступа к закрытым данным класса извне класса, поэтому они не могут полностью заменить дружественные функции. Конструктор - это метод класса, который автоматически вызывается при создании нового объекта этого класса. Конструкторы могут иметь параметры и могут быть перегружены (иметь несколько версий с разными параметрами). Параметризованный конструктор - это конструктор, который принимает один или несколько параметров, которые будут использоваться при создании объекта класса. Он позволяет инициализировать объекты класса с заданными значениями, что может быть удобно и полезно при работе с классами. Отличие между конструктором и параметризованным конструктором заключается в том, что параметризованный конструктор принимает аргументы, которые используются для инициализации объекта при его создании, в то время как конструктор может не иметь аргументов, либо принимать аргументы с фиксированными значениями.