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

Модификация перезагрузки - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 11:53     Модификация перезагрузки #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
#include <iostream>
#include <cstring>//для strcpy(),strlen()
using namespace std;
#include <process.h>//для exit()
 
class String
    {
    private:
      enum {SZ =80 };    
      char str [SZ];    
    public:
      String()         
        {strcpy(str,"");}
      String(char s [] )
        {strcpy(str,s);}
    void display()       
      {cout <<str;}
    String operator +=(String ss)
                                
        {
        if(strlen(str)+strlen(ss.str)>=SZ )
          {cout <<"\nПереполнение строки";exit(1);}
        strcat(str,ss.str);     
        return String(str);     
        }
    };
int main()
    {setlocale(LC_ALL,"Rus");
    String s1 ="С Новым Годом!"; 
                               
    String s2 ="Ура, товарищи!"; 
                              
    String s3;  
    s3 =s1 +=s2;
    cout <<"\ns1=";s1.display();
    cout <<"\ns2=";s2.display(); 
    cout <<"\ns3=";s3.display();
    cout <<endl;
    cin.get();
    cin.get();
    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
#include<iostream>
#include<iomanip>
#include <windows.h>
#include <string>
using namespace std;
class a
{private:
    char b[80],c[80];
public:
    a()
    {strcpy(b,"");}
    a(char b1[])
    {strcpy(b,c);}
    void fc()
    {cout<<"Введите первую строку --> ";
    SetConsoleCP(1251);
    cin>>setw(80)>>b;
    SetConsoleCP(866);
    cout<<"Введите первую строку --> ";
    SetConsoleCP(1251);
    cin>>setw(80)>>c;
    SetConsoleCP(866);
    }
    a operator+=(a a1)
    {strcat(a1.b,c);
    return a (a1);}
void fc1(a a1)
{cout<<a1.b<<endl;
    cout<<a1.c;}
};
int main ()
{setlocale(LC_ALL,"Rus");
a a1,a2;
a1.fc();
a1+=a2;
a1.fc1(a1);
cin.get();
cin.get();
return 0;
}
Но моя программа не работает. Как мне ее довести до рабочего состояния ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 11:53     Модификация перезагрузки
Посмотрите здесь:

Модификация программы C++
Модификация программы C++
C++ Модификация игр
Задача о камнях (почти рюкзак) модификация) C++
Модификация разработанного класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CAHTEXHUK
Заблокирован
18.07.2011, 11:58     Модификация перезагрузки #2
Цитата Сообщение от parkito Посмотреть сообщение
Как мне ее довести до рабочего состояния ?
для начала отступы надо нормальные сделать, мне даже читать не хочется это
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:02     Модификация перезагрузки #3
Цитата Сообщение от parkito Посмотреть сообщение
Но нужно использовать перезагрузку.
Не понял, что нужно сделать?
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:04  [ТС]     Модификация перезагрузки #4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не понял, что нужно сделать?
нужно чтоб проходила и работала конструкция

C++
1
a1+=a2;
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.07.2011, 12:09     Модификация перезагрузки #5
типа, сделать operator+( ... ) ?
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:10  [ТС]     Модификация перезагрузки #6
Цитата Сообщение от co6ak Посмотреть сообщение
типа, сделать operator+( ... ) ?
ну да только

C++
1
operator+=
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:10     Модификация перезагрузки #7
В классе 2 символьных массива char b[80],c[80];, что куда нужно присоединять при вызове оператора += ?
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:13  [ТС]     Модификация перезагрузки #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
В классе 2 символьных массива char b[80],c[80];, что куда нужно присоединять при вызове оператора += ?
Их нато сконтиковать (то есть соеденить ).
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:18     Модификация перезагрузки #9
Т.е. с присоеденить к b? А при чем тут операция +=?
Разумно делать так:
C++
1
2
3
4
5
6
7
8
9
10
11
a& operator+=(const a &ob){
   if(strlen(b)+strlen(ob.b)>80)
         std::cout<<"Переполнение в строке b\n";
   else strcat(b,ob.b);
 
   if(strlen(c)+strlen(ob.c)>80)
         std::cout<<"Переполнение в строке с\n";
   else strcat(c,ob.c);
 
   return *this;
}
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:26  [ТС]     Модификация перезагрузки #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
Т.е.
C++
1
2
   return *this;
}
Что это значит ?

Добавлено через 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
#include<iostream>
using namespace std;
class a
{private:
int h,m,s;
public:
    a(): h(0),m(0),s(0)
    {}
    a(int h1, int m1, int s1): h(h1),m(m1),s(s1)
    {}
    void fc(a a1, a a2)
    {cout<<"Введите первое время "<<endl<<endl;
    cout<<"Введите первые часы --> ";
    cin>>h;
    cout<<"Введите первые минуты --> ";
    cin>>m;
    cout<<"Введите первые секунды --> ";
    cin>>s;
    }
    a operator+ (a a2)
    {a2.h+=h;
    a2.m+=m;
    a2.s+=s;
        return a (a2);}
    void fc1(a a1)
    {cout<<a1.h<<endl;
    cout<<a1.m<<endl;
    cout<<a1.s<<endl;}
};
 
int main ()
{setlocale(LC_ALL,"Rus");
a a1,a2(5,6,7),a3;
a1.fc(a1,a2);
a3=a1+a2;
a3.fc1(a3);
cin.get();
cin.get();
return 0;
}
то есть первую велечину вводит пользователь, а вторую я сам проаисываю в коде. Что нужно изменить в программе чтбы с помощью перезагрузки (
C++
1
a operator+ (a a2)
) складывать данные введеные только пользователем ?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:33     Модификация перезагрузки #11
Цитата Сообщение от parkito Посмотреть сообщение
Что это значит ?
В каждом объекте класса есть указатель на него самого, который называется this.
C++
1
return *this;
означает - вернуть "самого себя". Это нужно для корректной работы выражений такого вида: a+=b+=c;
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:38  [ТС]     Модификация перезагрузки #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
#include<iostream>
#include<iomanip>
#include <windows.h>
#include <cstring>
using namespace std;
class a
{private:
        char b[80],c[80];
 
public:
     
        void fc()
        {cout<<"Введите первую строку --> ";
        SetConsoleCP(1251);
        cin>>setw(80)>>b;
        SetConsoleCP(866);
        cout<<"Введите первую строку --> ";
        SetConsoleCP(1251);
        cin>>setw(80)>>c;
        SetConsoleCP(866);
        }
        a& operator+=(const a &ob){
   if(strlen(b)+strlen(ob.b)>80)
         std::cout<<"Переполнение в строке b\n";
   else strcat(b,ob.b);
 
   if(strlen(c)+strlen(ob.c)>80)
         std::cout<<"Переполнение в строке с\n";
   else strcat(c,ob.c);
 
   return *this;
} 
void fc1(a a1)
{cout<<a1.b<<endl;
        cout<<a1.c;}
};
int main ()
{setlocale(LC_ALL,"Rus");
a a1,a2;
a1.fc();
a1+=a2;
a1.fc1(a1);
cin.get();
cin.get();
return 0;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:40     Модификация перезагрузки #13
Цитата Сообщение от parkito Посмотреть сообщение
то есть первую велечину вводит пользователь, а вторую я сам проаисываю в коде. Что нужно изменить в программе чтбы с помощью перезагрузки (
C++
1
a operator+ (a a2)
) складывать данные введеные тольк пользователем ?
мало что из этого понял. Возможно тебе нужно вот, что

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//определяем конструктор с параметрами
a(char *str1, char *str2){
   strcpy(b,str1);
   strcpy(c,str2);
}
//в main'e
char s1[80],s2[80];
std::cout<<"Enter first string: ";
std::cin>>s1;
std::cout<<"Enter second string: ";
std::cin>>s2;
a ob(s1,s2);
//так же создаем второй объект, например ob2
a+=b;
std::cout<<a;//нужно перегрузить оператор <<, если нужно
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:44  [ТС]     Модификация перезагрузки #14
Я хотел чтобы программа выполняла что-то на подобии этого

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
#include<iostream>
using namespace std;
class a
{private:
int h,m,s;
public:
    a(): h(0),m(0),s(0)
    {}
    a(int h1, int m1, int s1): h(h1),m(m1),s(s1)
    {}
    void fc(a a1, a a2)
    {cout<<"Введите первое время "<<endl<<endl;
    cout<<"Введите первые часы --> ";
    cin>>a1.h;
    cout<<"Введите первые минуты --> ";
    cin>>a1.m;
    cout<<"Введите первые секунды --> ";
    cin>>a1.s;
    
    cout<<"Введите второе время "<<endl<<endl;
    cout<<"Введите вторые часы --> ";
    cin>>a2.h;
    cout<<"Введите вторые минуты --> ";
    cin>>a2.m;
    cout<<"Введите вторые секунды --> ";
    cin>>a2.s;}
 
    a operator+ (a a2)
    {a2.h+=a2.h;
    a2.m+=a2.m;
    a2.m+=a2.m;
        return a (a2);}
    void fc1(a a1)
    {cout<<a1.h<<endl;
    cout<<a1.m<<endl;
    cout<<a1.s<<endl;}
};
 
int main ()
{setlocale(LC_ALL,"Rus");
a a1,a2,a3(5,6,7);
a1.fc(a1,a2);
a3=a1+a2;
a3.fc1(a3);
cin.get();
cin.get();
return 0;
}
то есть пользователь вводит числа в разные объекты, а затем они складываюся.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:44     Модификация перезагрузки #15
Цитата Сообщение от parkito Посмотреть сообщение
Эта программа так же работает некоректно как и первая
Так строки объекта a2 не инициализированы, поэтому при strlen() возвращает "левое" число (ищется первый байт, равный нулю, т.е. может быть очень большое число).
Net_Wanderer
18.07.2011, 12:46
  #16

Не по теме:

Цитата Сообщение от parkito Посмотреть сообщение
сконтиковать
Цитата Сообщение от parkito Посмотреть сообщение
перезагрузку

Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:49     Модификация перезагрузки #17
В код из 12-го поста добавь ввод строк для объекта a2;
C++
1
2
3
4
5
6
7
8
9
10
11
int main ()
{setlocale(LC_ALL,"Rus");
a a1,a2;
a1.fc();
a2.fc();//!!!
a1+=a2;
a1.fc1(a1);
cin.get();
cin.get();
return 0;
}
Добавлено через 2 минуты

Не по теме:

Net_Wanderer, говорил бы тогда, как правильно, а то смеятся мы все умеем!

2parkito

конкатенировать
перегрузка

parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:52  [ТС]     Модификация перезагрузки #18
А как сделать так чтоб они были инициализированы пользователем ?

Вот инициалтзированы переменые

C++
1
2
3
4
5
6
7
8
cout<<"Введите первую строку --> ";
        SetConsoleCP(1251);
        cin>>setw(80)>>b;
        SetConsoleCP(866);
        cout<<"Введите первую строку --> ";
        SetConsoleCP(1251);
        cin>>setw(80)>>c;
        SetConsoleCP(866);
Вот тут инициализированы эти объекты, но они инициализированы программистом, а не пользователем


C++
1
2
3
String s1 ="С Новым Годом!"; 
                               
    String s2 ="Ура, товарищи!";
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 12:53     Модификация перезагрузки #19
Цитата Сообщение от parkito Посмотреть сообщение
А как сделать так чтоб они были инициализированы пользователем ?
Я же показал выше, в 17-ом посте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 12:57     Модификация перезагрузки
Еще ссылки по теме:

Модификация объектов класса string C++
WinPcap - модификация пакета C++
Косвенная модификация переменной - разобрать код C++

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

Или воспользуйтесь поиском по форуму:
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
18.07.2011, 12:57  [ТС]     Модификация перезагрузки #20
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я же показал выше, в 17-ом посте.
не увидел. Все заработало. Спасибо!!! Тогда решение и проблемы второй программы тоже состоит в инициализации всех объектов.
Yandex
Объявления
18.07.2011, 12:57     Модификация перезагрузки
Ответ Создать тему
Опции темы

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