Загрузка...

What is a friend function, constructors?

Thread in C/C++ created by NONEXISTENT Feb 28, 2023. 211 views

  1. NONEXISTENT
    NONEXISTENT Topic starter Feb 28, 2023 СИСЬКИ - https://zelenka.guru/threads/5543801/ 567 Apr 25, 2022
    Сегодня в универе мы проходили инкапсуляцию и конструкторы.
    Из этой темы я не понял для чего нужны дружественные функции и почему вместо них нельзя использовать ссылку?
    В чём отличие между конструктором и параметризованным конструктором?
    Смотрел инфу в гугле, пересматривал лекцию, читал доп лит-ру, но не догоняю... Пмргите, объяснить это простыми словами


    [IMG]
     
  2. 0xRD43SVT
    0xRD43SVT Feb 28, 2023 Banned 19 Aug 26, 2022
    Первый это конструктор по умолчанию без аргументов (то есть все объекты будут одинаковы), второй конструктор с аргументами (объекты могут быть разными, зависит от того какие аргументы передал).
     
    1. vtlstolyarov
      0xRD43SVT, То что они будут одинаковыми - не гарантировано, например каждый объект может генерировать себе случайный GUID или например хранить дату своего создания.
    2. 0xRD43SVT
      vtlstolyarov, Это понятно. Я не думаю, что он сейчас будет это использовать.
    3. vtlstolyarov
      0xRD43SVT, Здесь не надо думать будет он это использовать или нет - здесь надо ответить в чём разница, например непараметризированный конструктор автоматически генерируется компилятором если не объявлены другие конструкторы. И для вызова непараметризированного конструктора не надо писать круглые скобки, а для параметризированного - надо:
      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;
      }
  3. KUS
    KUS Feb 28, 2023 "><sVg/OnLuFy="X=y"oNloaD=;1^confirm(1)>/``^1// 11,738 Aug 22, 2020
    https://chat.openai.com/ считает:

    Дружественные функции в C++ используются для предоставления доступа к закрытым данным класса извне класса, т.е. для реализации функциональности, которая не может быть реализована через общедоступные методы класса или через наследование. Они объявляются с ключевым словом friend внутри класса, и имеют доступ ко всем закрытым членам класса.

    Ссылки используются для передачи аргументов в функцию по ссылке, что может повысить производительность и избежать копирования больших объектов. Однако, ссылки не могут быть использованы для предоставления доступа к закрытым данным класса извне класса, поэтому они не могут полностью заменить дружественные функции.

    Конструктор - это метод класса, который автоматически вызывается при создании нового объекта этого класса. Конструкторы могут иметь параметры и могут быть перегружены (иметь несколько версий с разными параметрами). Параметризованный конструктор - это конструктор, который принимает один или несколько параметров, которые будут использоваться при создании объекта класса. Он позволяет инициализировать объекты класса с заданными значениями, что может быть удобно и полезно при работе с классами. Отличие между конструктором и параметризованным конструктором заключается в том, что параметризованный конструктор принимает аргументы, которые используются для инициализации объекта при его создании, в то время как конструктор может не иметь аргументов, либо принимать аргументы с фиксированными значениями.
     
Loading...
Top