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

Проблема с класами - C++

Восстановить пароль Регистрация
 
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 01:31     Проблема с класами #1
Вот пытаюсь описать клас(умова задачи в коментариях)но когда запускаю выбивает какуюту ошыбку типа
необратимое исключения типов и тд почему так?
вот код
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
// Individ 4 Class.cpp: определяет точку входа для консольного приложения.
//
/*Розробити клас Pupil з полями Прізвище, Номер школи, Клас, Успішність(1..12). Реалізувати різні види конструкторів, методи вводу і виводу, методи get і set для значень полів. 
Нехай дано масив даних про учнів. Виконати наступні дії:
4)  видрукувати прізвища тих, хто навчається у N класі на ударно чи на відмінно;
5)  посортувати дані за школами, а при однакових школах за класами;
6)  вивести на екран середню успішність старшокласників(6-11 кл.).
*/
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;int i=0;
class CPupil
{
public:
    char *m_name,*m_surname,*m_school,*m_clas;int *m_mark;string m_viv[5][100];
public:
    CPupil()
    {
        m_name="";m_surname="";m_school="";m_clas="";m_mark=0;
    }
    CPupil(char name[50],char surname[50],char school[50],char clas[50],int mark)
    {
        m_name=name;m_surname=surname;m_school=school;m_clas=clas;*m_mark=mark;
    }
    CPupil(CPupil &o)
    {
        m_name=o.m_name;m_surname=o.m_surname;m_school=o.m_school;m_clas=o.m_clas;m_mark=o.m_mark;
    }
    void set(void)
    {
        cout<<"Enter Name\n";
        cin>>m_name;
        cout<<"Enter Surname\n";
        cin>>m_surname;
        cout<<"Enter School\n";
        cin>>m_school;
        cout<<"Enter Class\n";
        cin>>m_clas;
        cout<<"Enter Mark\n";
        cin>>*m_mark;
        m_viv[i][0]=*m_name;
        m_viv[i][1]=*m_surname;
        m_viv[i][2]=*m_school;
        m_viv[i][3]=*m_clas;
        m_viv[i][4]=*m_mark;i++;
    }
    ~CPupil()
    {
        delete(m_name);delete(m_surname);delete(m_school);delete(m_clas);delete(m_mark);
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    CPupil a;
    a.set();
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2011, 01:31     Проблема с класами
Посмотрите здесь:

Работа с Класами в С++ C++
C++ Где ошибка? Работа с класами
C++ Не могу разобраться с класами
C++ Очень непростая программа с класами!
C++ Ошибка с класами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 01:48     Проблема с класами #2
Цитата Сообщение от KING1994 Посмотреть сообщение
m_name=name;m_surname=surname;m_school=school;m_clas=clas;*m_mark=mark;
KING1994, Си-строки нужно копировать - strcpy

либо исползовать std::string

Добавлено через 1 минуту
Цитата Сообщение от KING1994 Посмотреть сообщение
m_name="";m_surname="";m_school="";m_clas="";m_mark=0;
и память выделять нужно
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
19.09.2011, 02:07     Проблема с класами #3
KING1994, ты лучше напиши задание по русски, то ничего вообще непонятно
IrineK
Заблокирован
19.09.2011, 02:57     Проблема с класами #4
Советую упростить задачу и для начала создать класс с двумя полями: имя - оценка

Кроме уже высказанных замечаний: посмотрите на свою переменную i. "З якого дива" она попала в сеттер класса?
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 19:05  [ТС]     Проблема с класами #5
Со стрингами такая же проблема +ето указатель а не переменная типа чар

Добавлено через 40 секунд
Задача неважная мне важно што у меня не так.Я пока не получил конкретного ответа
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 19:09     Проблема с класами #6
KING1994, раз книжки читать не хотите то вот http://ru.wikipedia.org/wiki/Конструктор_копирования

Добавлено через 1 минуту
Цитата Сообщение от KING1994 Посмотреть сообщение
Задача неважная мне важно што у меня не так.Я пока не получил конкретного ответа
не выделана память под строки
нету конструктора копии
нету оператора присваивания
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 19:18  [ТС]     Проблема с класами #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
 CPupil()
        {
                m_name="";m_surname="";m_school="";m_clas="";m_mark=0;
        }
        CPupil(char name[50],char surname[50],char school[50],char clas[50],int mark)
        {
                m_name=name;m_surname=surname;m_school=school;m_clas=clas;*m_mark=mark;
        }
        CPupil(CPupil &o)
        {
                m_name=o.m_name;m_surname=o.m_surname;m_school=o.m_school;m_clas=o.m_clas;m_mark=o.m_mark;
        }
Вот описание все виды конструкторов.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 19:20     Проблема с класами #8
Цитата Сообщение от KING1994 Посмотреть сообщение
Вот описание все виды конструкторов.
это черти что, а не конструкторы, они не правильные, как писать правильно в таких случаях как ваш, читайте віше по ссылке или в книге ЕЩЕ раз прочитайте
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 19:21  [ТС]     Проблема с класами #9
Переменная і глобальная и она задействована под спецификатором public

Добавлено через 46 секунд
Так што в них не так?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 19:26     Проблема с класами #10
Цитата Сообщение от KING1994 Посмотреть сообщение
Так што в них не так?
Сейчас вы копируете указатели, тоесть при вызове деструктора для одного из объектов класса, данные потеряют все объекты.
Вам нужно выделять память под строки и потом их копировать.
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 19:27  [ТС]     Проблема с класами #11
Именно с книги я етот вариант и взял
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 19:31     Проблема с класами #12
Цитата Сообщение от KING1994 Посмотреть сообщение
Именно с книги я етот вариант и взял
значит возьмите любую другую книгу по С++ и сразу перейдите на страницу с описанием конструктора копирования
ибо этот код безграмотный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 19:25     Проблема с класами
Еще ссылки по теме:

Проблема с do-while C++
C++ Не корректно работает программа с класами

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

Или воспользуйтесь поиском по форуму:
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
20.09.2011, 19:25  [ТС]     Проблема с класами #13
Я решил ету задачу.Может кому будет надо вот код:
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
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<string>
#include<iomanip>
using namespace std;int i=1,j=0;
class CPupil
{
public:
    string m_name,m_surname,m_school,m_clas;int m_mark;string m_viv[100][4];int m_vivv[100];
public:
    CPupil():m_name(""),m_mark(0)
    {}
    CPupil(string name,char mark):m_mark(mark)
    {
        m_name.assign(name,0,name.length());
    }
    CPupil(CPupil &o):m_mark(o.m_mark)
    {
        m_name.assign(o.m_name,0,o.m_name.length());
    }
    void set(void)
    {
        cout<<"Enter School\n";
        cin>>m_school;
        cout<<"Enter Class\n";
        cin>>m_clas;
        cout<<"Enter Name\n";
        cin>>m_name;
        cout<<"Enter Surname\n";
        cin>>m_surname;
        cout<<"Enter Mark\n";
        cin>>m_mark;
        m_viv[i][0]=m_school;
        m_viv[i][1]=m_clas;
        m_viv[i][2]=m_name;
        m_viv[i][3]=m_surname;
        m_vivv[i++]=m_mark;
    }
    void get(void)
    {
        cout<<"Enter count of pupil whih ypu want to see->\n";
        cin>>j;
        cout<<setw(10)<<"School  Class  Name  Surname  Mark\n";
        cout<<setw(6)<<m_viv[j][0]<<" "<<setw(6)
        <<m_viv[j][1]<<" "<<setw(5)<<m_viv[j][2]<<" "<<setw(8)<<m_viv[j][3]<<" "<<setw(5)<<m_vivv[j]<<endl;
    }
    double uspih(void)
    {
    double sum=0;int j=0;double uspih;
        for(j=1;j<i;j++)
        sum+=m_vivv[j];
        uspih=sum/(j-1);
        return uspih;
    }
    void klas(void)
    {
        string N;bool E=false;
        cout<<"Enter Class which will be sorted->\n";
        cin>>N;
        cout<<setw(10)<<"School  Class  Name  Surname  Mark\n";
        for (int j=1;j<=i;j++)
            if(m_viv[j][1]==N)
            {
             cout<<setw(6)<<m_viv[j][0]<<" "<<setw(6)
             <<m_viv[j][1]<<" "<<setw(5)<<m_viv[j][2]<<" "<<setw(8)<<
             m_viv[j][3]<<" "<<setw(5)<<m_vivv[j]<<endl;E=true;
            }if(E==false)cout<<"Not found.\n";
    }
    void sort(int z)
    {
        z=0;int l=0,k=1;bool hod=true;int c,m4;string m,m1,m2,m3;
        cout<<setw(10)<<"School  Class  Name  Surname  Mark\n";
        for(int y=1;y<i;y++)
        {
        for(int x=y+1;x<i;x++)
            if(m_viv[y][z]==m_viv[x][z])
            {
            m=m_viv[y+1][z];m1=m_viv[y+1][z+1];m2=m_viv[y+1][z+2];m3=m_viv[y+1][z+3];m4=m_vivv[y+1];
            m_viv[y+1][z]=m_viv[x][z];m_viv[y+1][z+1]=m_viv[x][z+1];m_viv[y+1][z+2]=m_viv[x][z+2];m_viv[y+1][z+3]=m_viv[x][z+3];m_vivv[y+1]=m_vivv[x];
            m_viv[x][z]=m;m_viv[x][z+1]=m1;m_viv[x][z+2]=m2;m_viv[x][z+3]=m3;m_vivv[x]=m4;
            }
 
            for(int x=y+1;x<i;x++)
            if(m_viv[y][z]==m_viv[x][z]&&m_viv[y][z+1]==m_viv[x][z+1])
            {
            m=m_viv[y+1][z];m1=m_viv[y+1][z+1];m2=m_viv[y+1][z+2];m3=m_viv[y+1][z+3];m4=m_vivv[y+1];
            m_viv[y+1][z]=m_viv[x][z];m_viv[y+1][z+1]=m_viv[x][z+1];m_viv[y+1][z+2]=m_viv[x][z+2];m_viv[y+1][z+3]=m_viv[x][z+3];m_vivv[y+1]=m_vivv[x];
            m_viv[x][z]=m;m_viv[x][z+1]=m1;m_viv[x][z+2]=m2;m_viv[x][z+3]=m3;m_vivv[x]=m4;
            }
        }
    
        for(c=1;c<i;c++)
        cout<<setw(6)<<m_viv[c][z]<<" "<<setw(6)
        <<m_viv[c][z+1]<<" "<<setw(5)<<m_viv[c][z+2]<<" "<<setw(8)<<
        m_viv[c][z+3]<<" "<<setw(5)<<m_vivv[c]<<endl;       
    }
    ~CPupil()
    {   
    }
};
int main()
{
    CPupil *a=new(CPupil);char choise,ch;int z=0;
    do
    {
    a->set();cout<<"Do you whant to continue?(y/n)\n";
    choise=getch();cout<<endl;
    }
    while(choise!='n');
    do
     {
     cout<<"IF you whant to sort pupils by class press\"s\"\n";ch=getch();
     if(ch=='s')a->klas();
     }while(ch=='s');
           cout<<"IF you whant to sort pupils by school press \"d\"\n";ch=getch();
           if(ch=='d')a->sort(z);
      cout<<"If You whant to see students progress Enter\"p\"else Enter \"n\"\n";
      ch=getche();if(ch='p'){cout<<"Progress of pupils is:"<<" "<<a->uspih()<<endl;a->get();}
           while(ch!='n'){cout<<"Do you whant to continue?(y/n)\n";ch=getch();a->get();}
           delete(a);
    getch();
    return 0;
}
Добавлено через 2 минуты
ток первый public: надо заменить на private:,хотя ето не очень меняет суть
Yandex
Объявления
20.09.2011, 19:25     Проблема с класами
Ответ Создать тему
Опции темы

Текущее время: 21:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru