Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Создание объекта класса в методе этого же класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запись данных из файла в структуру http://www.cyberforum.ru/cpp-beginners/thread1766118.html
Условие задачи ниже. Файл с данными: What are colors in Russian flag (from top to bottom)? Red, blue and white white, blue and red Green, white and red White and red Green, blue and white 0 5
C++ Присвоить значения переменных в массив Array (class Array в Turbo C++) Здравствуйте!!! Изучаю help в Turbo C++ 3.1 дошел до класса Array: main() { //при подключение соответствующих библиотек и классов.cpp // скомпилировало без ошибки оператор: Array... http://www.cyberforum.ru/cpp-beginners/thread1766059.html
C++ Опять ошибка
Идет ошибка сегментации, а я в программировании не так силен, понять не могу в чем проблема... (+ Выдает ошибки, когда количество символов в файле, превышает n значение (не могу определить его)......
C++ Какой стек технологий использовать
Всем доброго времени суток! Хочу написать программу для черчения. Если быть точнее, то что-то в корне похожее на AutoCAD, но основная идея будет немного другой. Что лучше использовать для...
C++ Не могу скомпилировать прогрумма "Hello world" http://www.cyberforum.ru/cpp-beginners/thread1766040.html
Всем привет! Я не так давно решил начать изучать язык С++. До этого никаким образом программирования не касался вообще. Тема для меня абсолютно новая, но научиться очень хочу. Я раскопал книжку в...
C++ Не изменяются значения в массиве Здравствуйте, подскажите пожалуйста, не работает кусочек программы не изменяет значения, как исправить? for (int i=0; i<n; i++) for (int j=0; j<m; j++) { if((a<-3)&&(a>8)) {... подробнее

Показать сообщение отдельно
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141

Создание объекта класса в методе этого же класса - C++

19.06.2016, 09:54. Просмотров 343. Ответов 16
Метки (Все метки)

собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это правильно и как это можно сделать (если это правильно) или же как этого не делать (если это не правильно)
суть проблемы. пользователь вводит марку модель продукта и его кол-ва преступаемого на склад. эти данные принимаются методом класса, далее происходит проверка есть ли в бинарном файле объект с подобными характеристиками - если есть - изменить кол-во уже имеющегося объекта, если же нет, различаеться марка или модель товара - записать объект в файл. для чтения бинарного файла мне необходим размер объекта, для этого я создаю объект класса в самом классе и sizeof определяю его размер. вообще я даже не уверен, что в этом ошибка, программа аварийно завершается, valgrind я читаю с большим трудом (да ладно врать то, вообще не понимаю чего он мне пишет)) но а) все таки хотелось бы понять делают ли так б) может ткнете еще носом где я накосячил?? Спасибо братья )))


wire.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef WIRE_H
#define WIRE_H
#include "goods.h"
 
using namespace std;
 
 
class wire:public virtual goods {
    protected:
        string product;
        string brand;
        string model;
        float amount;
 
    public:
     wire(){};
     void compare(wire&);
     void show();
     void set(string&,string&,string&,string&);
     void new_write(wire&);
};
#endif // WIRE_H
wire.cpp
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
#include "wire.h"   // подключаем заголовочный файл
#include <cstring>  // для операций над string
#include <fstream>  // для открытия и чтнния файла
#include <iomanip>  // std::setw для форматированного вывод
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
/*здесь метод set принимает аргументы из main */
void wire::set(string& prod,string& br,string& mod,string& am){
    product  = prod;
    brand = br;
    model = mod;
    amount = atof(am.c_str());
 
    int count = 0;//count для проверки файла на отсутствие объектов
    
    wire temp; // !!!!создаю объект класса в этом же классе!!!!
    
    ifstream file;
    file.open("/home/dima/QT_CPP/my_project/binary/goods.txt",ios::in | ios::binary);
    if (!file.is_open()){
        cout<<"<База данных не обноруженна проверьте верность указания пути\n";
    } else {
        /*вот эта строчка из за которой я вынужден создавать объект класса в классе*/
        while(file.read((char*)&temp,sizeof(temp))){
            file.read((char*)&temp,sizeof(temp));;
            compare(temp); // считанный объект сравнить
            ++count;
        }
    }
    file.close();
    file.clear();//без сброса флагов ошибок работать не будет
 
    /*если файл пустой - записать объект*/
    if (count == 0 ) new_write(temp);
}
 
/*здесь происходит сравнение объекта, если совпадение марки и модели то передать объект в метод, где будет увеличенно
 * кол-во (сумма поступления товара и того, что уже было). метод прибавления пока не реализован, в ином случае - записать
 * объект как новый*/
 
void wire::compare(wire&temp){
    if (temp.brand == brand && temp.model == model);
    else new_write(temp);
}
 
/*здесь я присваиваю полям временного объекта  temp значения полученные из main и записываю объект в конец файла*/
void wire::new_write(wire&temp){
    temp.product = product;
    temp.brand = brand;
    temp.model = model;
    temp.amount = amount;
 
    ofstream file;
    file.open("/home/dima/QT_CPP/my_project/binary/goods.txt",ios::out | ios::app | ios::binary);
    if (!file.is_open()){
        cout<<"<База данных не обноружена проверьте верность указания пути\n";
    } else {
        file.write((char*)&temp,sizeof(temp));
    }
    file.close();
    file.clear();//без сброса флагов ошибок работать не будет
}
/*метод show - показывает, что есть поля объекта*/
void wire::show(){
    cout<<product<<" "<<brand<<" "<<model<<" "<<amount<<"\n";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru