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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс FileStream, создание класса 
V
    Опции темы
catty
Дата 11.12.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!
У меня есть пара вопросов по созданию класса. У меня задание есть звучит оно так:

Разработать класс FileStream, инкапсулирующий работу с файлами через стандартную библиотеку Си (fopen, fclose, fprintf, fscanf, fread, fwrite и т.д.). Реализовать методы от-крытия и закрытия файла (отдельный метод Open и метод Create и конструктор с именем открываемого файла, закры-вать – в деструкторе и отдельным методом Close) Реализо-вать методы Write и Read для int, double и char*. Обеспе-чить два режима записи – двоичный и текстовый. В тексто-вом режиме все числа записываются в виде текста, напри-мер, целое число 3987 записывается как последователь-ность символов ‘3987 ’ (преобразование можно сделать при помощи fprintf, например), а в двоичном  в виде последо-вательности двух байт: 0x93, 0x0f (при помощи fwrite).

Вопросы возникли в том что я по отдельности понимаю как делать конструктор и деконструктор. Да и методы open, close read и т.д. описываются в любом учебнике. Я не могу понять как их вместе написать. Как их все скомпоновать.
Еще , конечно, время поджимает. smile  Сессия подкралась опять незаметно. Так что время разбираться с книжкой за компом не осталось совсем. 
Помогите хоть наброском программы.
Всем заранее спасибо. smile 
PM MAIL   Вверх
bsa
Дата 11.12.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну вот небольшой набросок. Я реализовал open/close и read/write, а так же конструкторы с деструктором. Ну а остальное по аналогии сделать можно.
Код
class FileStream
{
       FILE *f;
public:
       FileStream() : f(0) {}
       FileStream(const char *name, const char *mode = "a+t") : f( fopen(name, mode) ){}
       ~FileStream() {
              close();
       }
       void close() {
            if (f) {
                 fclose(f); 
                 f = 0; 
            }
       }
       bool open(const char *name, const char *mode = "a+t") {
              close();
              f = fopen(name, mode);
              return (f != 0);
       }
       size_t read(void *buffer, size_t size) {
             if (!f)
                   return 0;
             return fread(buffer, size, 1, f);
       }
       size_t write(const void *buffer, size_t size) {
             if (!f)
                   return 0;
             return fwrite(buffer, size, 1, f);
       }
};

PM   Вверх
catty
Дата 11.12.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



еще вопрос у меня  компилятор стоит Visual Studio 2005. Где там кнопка чтобы программу компилировать?
bsa большое спасибо. 
И еще нужно ли для класса писать файл main.cpp? или этого одного файла хватит. или мы так проверим правильность класса?

Короче я совсем запуталась. smile 
PM MAIL   Вверх
bsa
Дата 11.12.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



catty, достаточно одного файла. У тебя же не огромный проект.  smile 
А вот функцию main() для проверки того, как работает класс сделать стоит.
Где находится и как выглядит кнопка компиляции я не знаю. Ищи в меню пункты Build или Make. Скорее всего, это в меню Project, если такое есть.
PM   Вверх
zkv
Дата 11.12.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(catty @  11.12.2007,  21:08 Найти цитируемый пост)
Где там кнопка чтобы программу компилировать?

зеленый треугольник ориентированный направо, на кнопку "Play" похож smile
PM MAIL   Вверх
catty
Дата 11.12.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну все понятно спасибо большое  smile  

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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



catty

M
MAKCim
Модератор: Впредь после получения ответа помечайте вопрос как решенный!



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
sascha
Дата 12.12.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер! Нужна небольшая помощ по созданию класса.

Создать класс bankont, в котором хранится два числа - сумма и процентная ставка в год. Классу состатвить следущие методы-1.конструктор подающий первоначальные значения 2. деструктор ликвидирущий обьект 3. пополнение счета определенной суммой 4. уменьшение счета 5. вычисление суммы в процентах в определенный период времени и пополнение счета этой суммой( учитывая что в месяцах 30 дней)

(желательно небольшие наброски )

 smile  smile 

PM MAIL   Вверх
bsa
Дата 12.12.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



sascha, один вопрос - одна тема.
Если не хочешь писать сам(а), то тебе сюда: http://forum.vingrad.ru/forum/Vingrad-help-center.html
PM   Вверх
deeeee
Дата 27.11.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



задание абсолютно такое же, могли бы помочь вот в этом:


FileStream.h
Код
#ifndef __FILESTREAM_H
#define __FILESTREAM_H


class FileStream
{
public:
    FileStream(char *name, char *mode);
    ~FileStream()
    {
        close();
    }
    void close();
    void open (char *name, char *mode);
};

#endif

FileStream.cpp
Код
#include "StdAfx.h"
#include "FileStream.h"

FILE *f1;

void open (char *name, char *mode)
{
    f1 = fopen ("file1", "w");
}

void close()
{
    if (f1) 
    {
        fclose(f1); 
        f1 = 0; 
    }
}


main.cpp
Код
#include "stdafx.h"
#include "FileStream.h"

void main( )
{
    FileStream f2("f2", "w");
    f2.open ("f2", "w");
}


Цитата
1>lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall FileStream::open(char *,char *)" (?open@FileStream@@QAEXPAD0@Z) в функции _main
1>lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall FileStream::FileStream(char *,char *)" (??0FileStream@@QAE@PAD0@Z) в функции _main
1>lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall FileStream::close(void)" (?close@FileStream@@QAEXXZ) в функции "public: __thiscall FileStream::~FileStream(void)" (??1FileStream@@QAE@XZ)
1>C:\Users\chee\Documents\Visual Studio 2008\Projects\lab1\Debug\lab1.exe : fatal error LNK1120: 3 неразрешенных внешних элементов




Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 27.11.2010, 09:13
PM MAIL   Вверх
DarthGuyver
Дата 27.11.2010, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Объявление класса:

Код

class FileStream
{
   FILE *f1;   
public:
    FileStream(char *name, char *mode);
    ~FileStream()
    {
        close();
    }
    void close();
    void open (char *name, char *mode);
};


определение методов:
Код

FileStream::FileStream(char *name, char *mode)
{
   f1 = fopen (name, mode);
}

void FileStream::open (char *name, char *mode)
{
    if (f1 == 0)
      fclose (f1); 
    f1 = fopen (name, mode);
}

void FileStream::close()
{
    if (f1) 
    {
        fclose(f1); 
        f1 = 0; 
    }
}

PM MAIL   Вверх
deeeee
Дата 27.11.2010, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Благодарю
PM MAIL   Вверх
DarthGuyver
Дата 27.11.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да пожалуйста)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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