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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
#1

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

19.09.2011, 01:31. Просмотров 609. Ответов 12
Метки нет (Все метки)

Вот пытаюсь описать клас(умова задачи в коментариях)но когда запускаю выбивает какуюту ошыбку типа
необратимое исключения типов и тд почему так?
вот код
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2011, 01:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с класами (C++):

Работа с Класами в С++ - C++
Люди виручайте есть такое задание: Написати клас для ефективної роботи з рядками, дозволяючий форматувати і порівнювати рядки,...

Ошибка с класами - C++
Нашел себе книгу &quot;С++ за 21 день&quot; и там начал делать примеры. Но почему-то дойдя до классов ничего получается. Rect.h #include...

Не могу разобраться с класами - C++
На днях приобрел книжку Г. Шилдт Там есть пример #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class...

Не корректно работает программа с класами - C++
Привет Всем. У меня есть к Вам просьба. Я вот написал программу,но в ней редактирование и удаление данных из базы данных работает не...

Очень непростая программа с класами! - C++
Всем привет! Нужно сделать класс Matrix (квадратная матрица) Действия: -=, *=. Класс должен иметь конструкторы, для создания объектов...

Где ошибка? Работа с класами - C++
#include &lt;iostream.h&gt; #include &lt;assert.h&gt; using namespace std; class complex { double re,im; public:

12
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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;
и память выделять нужно
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
19.09.2011, 02:07 #3
KING1994, ты лучше напиши задание по русски, то ничего вообще непонятно
0
IrineK
Заблокирован
19.09.2011, 02:57 #4
Советую упростить задачу и для начала создать класс с двумя полями: имя - оценка

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

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

Добавлено через 1 минуту
Цитата Сообщение от KING1994 Посмотреть сообщение
Задача неважная мне важно што у меня не так.Я пока не получил конкретного ответа
не выделана память под строки
нету конструктора копии
нету оператора присваивания
0
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;
        }
Вот описание все виды конструкторов.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.09.2011, 19:20 #8
Цитата Сообщение от KING1994 Посмотреть сообщение
Вот описание все виды конструкторов.
это черти что, а не конструкторы, они не правильные, как писать правильно в таких случаях как ваш, читайте віше по ссылке или в книге ЕЩЕ раз прочитайте
0
KING1994
-68 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
19.09.2011, 19:21  [ТС] #9
Переменная і глобальная и она задействована под спецификатором public

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

Робота с класами - C++/CLI
Я пишу програму на задачу: Дано формулу ? 1 ? 2 ? … ? n = k. вместо ? должны стоять знаки + или - мы вводим число k а нам должно...

Передача данных между несколькими класами (ADO) - C#
Доброго времени форумчане. До недавнего времени для передачи данных между формами и классами использовал публичные свойства контролов...

Проблема. XP и 7 - Windows
У меня сначала был установлен Windows 7. Он повредился обновлением (через 2 часа перезагружается). Брат установил XP на убитый хард (он был...

проблема с jq - jQuery
есть форма:&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru