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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
#1

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

18.07.2011, 11:53. Просмотров 1249. Ответов 24
Метки нет (Все метки)

Программа рабочая вот такая


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

Модификация игр - C++
Всем привет! Суть вопроса: Какую игру выбрать для модификации, что бы понять основы игростроения. Детали ниже! :) Я достаточно...

Модификация сортировки - C++
Ребят почему не сортируются двойки. Все сортируются а они впереди остаются. Просто задание в книжке чтоб пузырьковое сортирование...

Модификация программы - C++
Модифицируйте программу из данного раздела так, чтобы она подсчитывала не только буквы, но и встретившиеся пробелы, символы табуляции и...

Модификация программы - C++
Препод задал модифицировать программу. программа считает есть ли в последовательности цифры, которые больше, чем следующие. #include...

WinPcap - модификация пакета - C++
Мне нужно перехватить определенный пакет, изменить его , и отослать уже браузеру. Подскажите, справится ли с этим WinPcap , или она только...

Модификация разработанного класса - C++
Создал класс видеомагнитофон, требуется доработать его вот по этому заданию: Рассмотреть модификацию видеомагнитофона,который...

24
CAHTEXHUK
Заблокирован
18.07.2011, 11:58 #2
Цитата Сообщение от parkito Посмотреть сообщение
Как мне ее довести до рабочего состояния ?
для начала отступы надо нормальные сделать, мне даже читать не хочется это
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 12:02 #3
Цитата Сообщение от parkito Посмотреть сообщение
Но нужно использовать перезагрузку.
Не понял, что нужно сделать?
1
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
18.07.2011, 12:04  [ТС] #4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не понял, что нужно сделать?
нужно чтоб проходила и работала конструкция

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

C++
1
operator+=
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 12:10 #7
В классе 2 символьных массива char b[80],c[80];, что куда нужно присоединять при вызове оператора += ?
1
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
18.07.2011, 12:13  [ТС] #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
В классе 2 символьных массива char b[80],c[80];, что куда нужно присоединять при вызове оператора += ?
Их нато сконтиковать (то есть соеденить ).
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 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;
}
1
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
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)
) складывать данные введеные только пользователем ?
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 12:33 #11
Цитата Сообщение от parkito Посмотреть сообщение
Что это значит ?
В каждом объекте класса есть указатель на него самого, который называется this.
C++
1
return *this;
означает - вернуть "самого себя". Это нужно для корректной работы выражений такого вида: a+=b+=c;
1
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
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;
}
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 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;//нужно перегрузить оператор <<, если нужно
0
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 692
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;
}
то есть пользователь вводит числа в разные объекты, а затем они складываюся.
0
Kastaneda
Нарушитель
Эксперт С++
4673 / 2877 / 233
Регистрация: 12.12.2009
Сообщений: 7,309
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 12:44 #15
Цитата Сообщение от parkito Посмотреть сообщение
Эта программа так же работает некоректно как и первая
Так строки объекта a2 не инициализированы, поэтому при strlen() возвращает "левое" число (ищется первый байт, равный нулю, т.е. может быть очень большое число).
0
18.07.2011, 12:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 12:44
Привет! Вот еще темы с ответами:

Модификация объектов класса string - C++
ООП С++ Лафоре есть пример: // sstrchng.cpp // изменение частей строки #include &lt;iostream&gt; #include &lt;string&gt; using...

Модификация внутренней переменной лямбды - C++
Добрый вечер, что-то помню, что-то всплывает перед глазами в качестве кода - но не могу подобрать запрос в гугле, чтобы найти то о чём...

Задача о камнях (почти рюкзак) модификация) - C++
из камней весом p1, p2 ... pn набрать вес W если это возможно вывести yes, если не - no, но есть проблемка: в дополнение к задаче дается...

Косвенная модификация переменной - разобрать код - C++
Здравствуйте! Я немного запутался в результатах работы программы. Все действия понятны, а почему такой результат нет. Я...


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

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

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