@sabn1k
Возможно я написал чепуху, но попытайтесь понять

Struct — что это?

В книге дошел до классов, но насколько я помню, когда я давно читал книгу Праты, там все было постепенно и классы объявлялись с помощью слова class, а в учебнике Липпмана сразу struct без какого либо объяснения. В итоге, после прочтения, я получил такой код:
struct Sales_data
{
	Sales_data() = default;
	Sales_data(const string &s) : bookNo(s) {}
	Sales_data(const string &s, unsigned n, double p) : bookNo(s), units_sold(n), revenue(p*n) {}
	Sales_data(istream &);
	//другие члены как прежде
	string isbn() const
	{
		return bookNo;
	}
	Sales_data &combine(const Sales_data &);
	double avg_price() const;
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};
Sales_data total;
Sales_data trans;

Господи, что это? Поясните, пожалуйста.
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 4
@sdxq
Структуры в C++ эквивалентны классам, модификатор доступа по умолчанию в структурах - public, в классах - private.
Ответ написан
Комментировать
Djaler
@Djaler
Сеньор-помидор
Как упомянул sdxq, по факту структуры и классы идентичны, кроме модификатора доступа по умолчанию. Но исторически так сложилось, что структуры используются только для хранения каких-либо данных, без операций. Например,
struct Point
{
  int x;
  int y;
}
Ответ написан
@res2001
Developer, ex-admin
Если я в классе до модификатора public укажу эти конструкторы, как ими пользоваться вообще?

Этот прием используется для создания классов, которые могут создаваться только друзьями или статическими публичными методами класса, например для гарантирования создания только одного объекта класса (паттерн singleton). Обычно кроме конструкторов в private секцию помещают и деструктор, а так же делают friend или static метод для получения экземпляра класса и для его уничтожения.
Кроме того конструктор и деструктор можно поместить в секцию protected класса - тогда экземпляры класса смогут создавать только потомки.
Ответ написан
Комментировать
@abcd0x00
Структуры используются для создания составных типов данных. Раньше (в C) они ограничивались только данными, но потом (в C++) для этих составных данных добавили и создание операций над ними.

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

То же самое касается и инициализации: если раньше можно было инициализировать одним способом, то теперь можно сделать разные способы инициализации путём создания разных конструкторов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы