Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 2
Регистрация: 09.03.2015
Сообщений: 32
1

Последовательный вызов методов класса

01.05.2015, 23:48. Показов 808. Ответов 4
Метки нет (Все метки)

Здравствуйте. Есть два метода, как их запихнуть в класс, чтобы оба работали, сначала один, затем другой? пробовал много способов, и через объект обращался, конструктор, что-то получилось, но работал один метод, и то записывает в файл все время букву "МММММ" не зависимо от того, что я в него пишу..мне нужно, чтобы сначала создал файл, а потом его прочитал...

Задание:

* void SaveToFile(char* fn) – создает новый файл с названием fn и записывает в него массив в двоичном виде; генерирует исключение в случае, если файл не удалось открыть или операции ввода-вывода завершились ошибкой;

* void LoadFromFile(char* fn) – открывает двоичный файл с названием fn и считывает из него массив; генерирует исключение в случае, если файл не удалось открыть или операции ввода-вывода завершились ошибкой.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<fstream>
#include<string>
 
using namespace std;
void SaveToFile(char*fn, int* a, int n)
{
    ofstream text(fn, ios_base::binary);
    if (!text)
        throw "Файл не удается открыть!";
    for (int i = 0; i < n; i++) {
        text.write((char*)&a[i], sizeof (int));
    }
    text.close();
    cout << endl << "Файл с названием " << fn << " создан" << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char fn[100];
    cout << "Введите название файла: ";
    cin.getline(fn, 100);
    int n;
    cout << "Введите размер массива: ";
    cin >> n;
    int* a;
    a = new int[n];
    for (int i = 0; i < n; i++){
        cout << "Введите Элемент " << "[" << i + 1 << "]:";
        cin >> a[i];
    }
    try
    {
        SaveToFile(fn, a, n);
    }
    catch (char* err)
    {
        cout << err << endl;
    }
    delete[] a;
 
    system("pause");
    return 0;
}
и


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<fstream>
#include<string>
 
using namespace std;
 
class TP
{
public:
    char fn[100];
 
 
    void LoadToFile(char*fn)
    {
 
        ifstream text(fn, ios::binary);
        if (!text)
            try
        {
            throw ("Ошибка. Файл не возможно открыть!");
        }
        catch (char* err)
        {
            cout << err;
        }
        int a = 0;
        while (text.read((char *)&a, sizeof(int)))
            cout << a << ' ';
        cout << '\n';
 
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    TP obj_1;
    char name[50];
    cout << "Введите название файла: ";
    cin.getline(name, 50);
    obj_1.LoadToFile(name);
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2015, 23:48
Ответы с готовыми решениями:

Вызов методов класса из двойного указателя на экземпляр класса
Добрый день! Как можно вызвать метод класса по двойному указателя на его экземпляр? struct...

Вызов методов класса
// practice.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Вызов методов класса
Здравствуйте! При компиляции программы(в среде CodeBloks) выдается такая ошибка: request for...

Вызов методов производного класса
Возникла проблема с выполнением задачи. программа запускается, работает, но почему-то не выводит...

4
lss
937 / 865 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
02.05.2015, 00:15 2
Проблема непонятна.
Цитата Сообщение от mylifemyrules Посмотреть сообщение
пробовал много способов,
Покажи, как пробовал.
Цитата Сообщение от mylifemyrules Посмотреть сообщение
и то записывает в файл все время букву "МММММ" не зависимо от того, что я в него пишу..
В блокноте смотришь? В коде бинарные методы записи, если пишутся не коды символов, то что хочешь увидеть в блокноте?
0
494 / 376 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
02.05.2015, 01:38 3
Цитата Сообщение от mylifemyrules Посмотреть сообщение
чтобы оба работали, сначала один, затем другой?
Вызывать по очереди...

Вопрос не ясен,
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
02.05.2015, 02:33 4
Цитата Сообщение от mylifemyrules Посмотреть сообщение
text.write((char*)&a[i], sizeof (int));
Ты записываешь адрес i-го элемента массива a, прямо так как он в памяти лежит. Т.е. адрес 0x0000004A в файле будет " J".
0
lss
937 / 865 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
02.05.2015, 02:56 5
Цитата Сообщение от Enno Посмотреть сообщение
Ты записываешь адрес i-го элемента массива a,
Правильно тут всё. И должен быть адрес, записывается не адрес, а байты по адресу.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include<iostream>
#include<fstream>
using namespace std;
 
class TP
{
    int* a;
    int n;
public:
    
    TP(int m)
    {
        n = m;
        a = new int[n];
        for (int i = 0; i < n; i++)
        {
            cout << "Введите Элемент " << "[" << i + 1 << "]:";
            (cin >> a[i]).get();
        }
    }
    
    TP(const TP& tp)
    {
        n = tp.n;
        a = new int[n];
        for (int i = 0; i < n; ++i)
            a[i] = tp.a[i];
    }
 
    TP& operator=(const TP& tp)
    {
        if (this != &tp)
        {
            delete [] a;
            n = tp.n;
            a = new int[n];
            for (int i = 0; i < n; ++i)
                a[i] = tp.a[i];
        }
        return *this;
    }
    
    ~TP()
    {delete [] a;}
    
    void SaveToFile(char*fn)
    {
        ofstream text(fn, ios_base::binary);
        if (!text)
            throw "Файл не удается открыть!";
        
        text.write((char*)a, sizeof(int) * n);
        if (text.fail())
            throw ("Ошибка записи файла!");
        
        text.close();
        
        cout << endl << "Файл с названием " << fn << " создан" << endl;
    }
    
    void LoadToFile(char*fn)
    {
 
        ifstream text(fn, ios::binary);
        if (!text)
            throw ("Ошибка. Файл невозможно открыть!");
            
        text.read((char *)a, sizeof(int) * n);
            
        if (text.fail())
            throw ("Ошибка чтения файла!");
        text.close();
    }
 
    void show()
    {
        for (int i = 0; i < n; i++)
            cout << a[i] << ' ';
        cout << endl;
    }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    int n;
    cout << "Введите размер массива: ";
    (cin >> n).get();
    
    TP obj_1(n);
    
    char name[50];
    cout << "Введите название файла: ";
    cin.getline(name, 50);
   
    try
    {
        obj_1.SaveToFile(name);
    }
    catch (char* err)
    {
        cout << err << endl;
        system("pause");
        return 0;
    }
    
    try
    {
        obj_1.LoadToFile(name);
    }
    catch (char* err)
    {
        cout << err << endl;
        system("pause");
        return 0;
    }
 
    cout << "Содержимое файла " << name << ":\n";
    
    obj_1.show();
    
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2015, 02:56

Вызов наследуемых методов из базового класса
Всем доброго времени суток, перейду сразу к сути. Код: class Base { protected: ...

Вызов методов производного класса из базового
Возможно ли, чтобы class A { void f1() { f2();//если вызвано из B, то вызывается B::f2(), а...

Вызов методов класса в функцию main()
#include &lt;iostream&gt; using namespace std; class Person { public: char name; int age; void...

Вызов переопределенного метода из методов базового класса
Здравствуйте, у меня есть два класса, базовый и производный. В производном классе я переопределяю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru