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

Виртуальные функции. Программа вылетает с ошибкой. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разветвление http://www.cyberforum.ru/cpp-beginners/thread432489.html
Ввести три целых числа и найти наибольшее из них. #include <iostream.h> main() { int a, b, c, max; cout<<"Vvedite tri zeluh chisla "; cin>>a>>b>>c; if
C++ Определение максимальных элементов массива (С++) Всем добрый день) Задача следующая. Даны два массива, в одном 5 элементов, в другом 20. Определить индексы и значения максимальных элементов в каждом массиве. Всё, в принципе, работает, но никак не... http://www.cyberforum.ru/cpp-beginners/thread432485.html
C++ Упрощение и алгоритм
Здрасте есть рекурентное выражение не удаётся упростить для нахождения итератора, (ВСЯ ПРОБЛЕМА - ЭТО ДВОЙНОЙ ФАКТОРИАЛ) и может поправите алгоритм double a,c,sum; sum = a=c=x; k=1; while...
C++ ошибки компиляции консоли с++ и zlib 1.1.3, visual studio 2010
Привет, скачал в интернете исходники zlib 1.1.3 (знаю, что последняя версия гораздо больше, но мне нужна именно эта) и в microsoft visual studio 2010 пытаюсь скомпилировать простенькое консольное с++...
C++ Рахработать программу 2 в 1! http://www.cyberforum.ru/cpp-beginners/thread432455.html
Разработать две программы. Первая принимает от пользователя два значения времени – строки вида ЦЦ.ЦЦ.ЦЦ, где Ц – это любая цифра из диапазона . Далее она вычисляет полное количество секунд,...
C++ Программа на c++ ( надо проверить ) Программа должна сортировать числа в массиве по возрастанию! Не мало раз проверял в чем касяк, не могу найти=) Если найдете, буду рад услышать ошибку) Вот сама программа: // Программа служит... подробнее

Показать сообщение отдельно
vse
0 / 0 / 1
Регистрация: 04.01.2012
Сообщений: 8

Виртуальные функции. Программа вылетает с ошибкой. - C++

21.01.2012, 18:41. Просмотров 1011. Ответов 8
Метки (Все метки)

Хотя дело может быть и не в виртуальных функциях.
В общем портянка такова:
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
using std::srand;
using std::rand;
 
class Object {
      public:
             unsigned char pole;
             void init();
             void set(unsigned char val);
             virtual Object plus(Object a);
             virtual Object minus(Object a);
             virtual void show(int type);
};
 
class BitString : public Object {
      public:
             int size;
             unsigned char stroka[100];
             void init(int val);
             virtual BitString plus(BitString a); //or
             virtual BitString minus(BitString a); //and
             virtual void show();
};
 
class Hex : public Object {
      public:
             virtual Object plus(Object a);
             virtual Object minus(Object a);
             virtual void show(int type);
};
 
void Object::init(){
     pole=0;          
}
 
void Object::set(unsigned char val){
     pole=val;          
}
 
Object Object::plus(Object a){
       Object res;
       res.init();
       res.pole=pole+a.pole;
       return res;
}
       
Object Object::minus(Object a){
       Object res;
       res.init();
       res.pole=pole-a.pole;
       return res;
}
 
void Object::show(int type=0){
     char stroka[3];
     if (type==0) cout<<pole; 
     else { 
          sprintf(stroka,"%3d",pole);
          cout<<stroka;
     }
}
 
 
void BitString::init(int val){
     int i,bit;
     srand(time(NULL));
     pole=0;
     size=val;
     for (i=0;i<val;i++){
         bit=rand()%1000;
         stroka[i]=bit%2;
         }
}
     
BitString BitString::plus(BitString a){//or
          BitString res;
          int i,min;
 
          res.init(10);
          
        return res;
}
          
BitString BitString::minus(BitString a){//and
          
          BitString res;
          int i,min;
          
          res.init(10);
           return res;
          }
          
void BitString::show(){
     char symb[1];
     int i;
     
     for (i=0;i<size;i++){
          sprintf(symb,"%1d",stroka[i]);
          cout<<symb;
     }
     cout<<"\n";
     
}
 
 
 
int main() {
    Object a,b,c;
    BitString s1,s2;
    BitString s3;
    cout<<"===== Object =====\n";
    a.init();
    b.init();
    c.init();
    a.set(10);
    b.set(20);
    c=a.plus(b);
    cout<<"c=a+b "; c.show(1); cout<<" "; a.show(1); cout<<" ";b.show(1);cout<<"\n";
    c=a.minus(b);
    cout<<"c=a-b "; c.show(); cout<<" "; a.show(); cout<<" ";b.show();cout<<"\n";
 
    cout<<"===== BitString =====\n";
    s1.init(10);
    cout<<"s1:\n"; s1.show();
    s2.init(15);
    cout<<"s2:\n"; s2.show();
    s3.init(10);
    cout<<"s3:\n"; s3.show();    
    s3=s1.plus(s2); //ВОТ ТУТ выполнение программы завершается виндовым приложение будет закрыто, 
//с предложением отправить отчет
    cout<<"s3=s1 or s2\n"; s3.show();//или тут
  //  s3=s1.minus(s2);
  //  cout<<"s3=s1 and s2\n"; s3.show();
    
    
    
    cin.get();
    return 0;
}
при таком варианте
C++
1
2
3
4
5
6
7
8
9
10
11
     cout<<"===== BitString =====\n";
    s1.init(10);
    cout<<"s1:\n"; s1.show();
    s2.init(15);
    cout<<"s2:\n"; s2.show();
    s3.init(10);
    cout<<"s3:\n"; s3.show();    
    //s3=s1.plus(s2); 
   // cout<<"s3=s1 or s2\n"; s3.show();
  //  s3=s1.minus(s2);
  //  cout<<"s3=s1 and s2\n"; s3.show();
успевает до ошибки вывести на экран кучу символов, как если бы был бесконечный цикл в init(), потом вылетает с ошибкой.
Система винда xp sp2.
Работаю в Dev-C++ 4.9.9.2

Что это может быть?

Добавлено через 6 минут
при варианте
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
void BitString::init(int val){
     int i,bit;
     srand(time(NULL));
     pole=0;
     size=val;
     for (i=0;i<val;i++){
         bit=rand()%1000;
         stroka[i]=bit%2;
         }
}
...
void BitString::show(){
     char symb[1];
     int i;
     
     for (i=0;i<10;i++){
          sprintf(symb,"%1d",stroka[i]);
          cout<<symb;
     }
     cout<<"\n";
     
}
...
    cout<<"===== BitString =====\n";
    s1.init(10);
    cout<<"s1:\n"; s1.show();
    s2.init(15);
    cout<<"s2:\n"; s2.show();
    s3.init(10);
    cout<<"s3:\n"; s3.show();
Выходит без ошибки с такими данными:
Код
s1:
0000011100
s2:
0000011100
s3:
02533400000208253
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru