Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс и структура 
:(
    Опции темы
shinoby
Дата 7.3.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Во многом класс и структура похожи.
Вопрос: Предположим я создал класс и обявил массив объектов данного класса (т.е. пытаюсь организовать что-то на подобии базы данных). Каждому элементу данного массива я присвоил N-ую информацию. Могу ли я записать/считать полученные данные в (из) файл(а), как это делал со структурами (по блочно, при помощи fread() и fwrite())?
В стиле С++ какие еще функции работают с блочной передачей данных (желательно с синтаксисом)?
PM MAIL   Вверх
baldina
Дата 7.3.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



можешь, точно так же. если нет виртуальных функций

Это сообщение отредактировал(а) baldina - 7.3.2008, 22:10
PM MAIL   Вверх
shinoby
Дата 7.3.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Цитата(baldina @ 7.3.2008,  22:08)
можешь, точно так же. если нет виртуальных функций

Так то оно так, вопрос в другом: как эти функции будут реагировать на процедуры внутри класса, ведь их наличие и является существенным отличием между структурами и классами?
Класс без процедур - это структура (улавливаешь суть разницы)?
PM MAIL   Вверх
baldina
Дата 7.3.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



но вообще принято почленно выводить. все-таки С++ - язык сильно типизированный.
Если нужно систематически сохранять/восстанавливать объекты, стоит посмотреть в сторону boost::serialization

Добавлено через 2 минуты и 49 секунд
"процедуры внутри класса" - они функциями-членами или методами называются - не занимают места в классе, не подлежат сохранению и восстановлению.

Код

class A {
  int a;
};

class B {
  int b;
  void f (int a, int, int);
};

sizeof (A) == sizeof (B)

Добавлено через 7 минут и 30 секунд
Цитата

Класс без процедур - это структура 


Это неверно. В С++ struct и class отличаются только доступом к членам по умолчанию: для struct - public, для class - private
PM MAIL   Вверх
shinoby
Дата 7.3.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Ну насчет: "Класс без процедур - это структура" я немного утрировал.
А что получается если в классе присутствуют виртуальные функции?
PM MAIL   Вверх
baldina
Дата 7.3.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



в классе хранится указатель на таблицу виртуальных функций. где именно этот указатель и т.п. стандартом не определено и зависит от реализации. следовательно схема такая: сохраняются данные класса (значения переменных-членов). Для восстановления надо сначала создать экземпляр класса в памяти (обычно используя конструктор по умолчанию), а потом записать в члены класса сохраненные значения. библиотеки типа boost::serialization этим и занимаются

Добавлено через 5 минут и 21 секунду
в простых случаях можно обойтись подручными средствами:

Код

class X {
  int i;
  std::string s;
  double d;

public:
  friend ostream& operator<<(ostream& os, const X&);
  friend istream& operator>>(istream& is, X&);
};

ostream& operator<<(ostream& os, const X& x)
{
   os << x.i << x.s << x.d;
   return os;
}

istream& operator>>(istream& is, X& x)
{
   is >> x.i >> x.s >> x.d;
   return is;
}

PM MAIL   Вверх
shinoby
Дата 7.3.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Цитата(baldina @ 7.3.2008,  22:33)
std::string s;

В чем суть данного участка кода?

P.S.:Все когдато-то были начинающими! smile 

Это сообщение отредактировал(а) shinoby - 7.3.2008, 23:05
PM MAIL   Вверх
jonie
Дата 7.3.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



объявление члена класса типа std::string с именем s
std - пространство имен
string - имя класса
s - имя члена класса Х
----
std::string "в заголовках" находится в <string>



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.