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

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

Войти
Регистрация
Восстановить пароль
 
GrukhvinEV
23 / 23 / 0
Регистрация: 08.11.2011
Сообщений: 284
#1

Перезагрузка операций - C++

29.08.2012, 14:54. Просмотров 704. Ответов 4
Метки нет (Все метки)

Класс String описан следующим образом:
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
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
class String{
private: String(char*str; //строка объекта
public: String(char*strl) //конструктор
str=new char [n+1];
                    strcpy (str,strl);}
                    String () {
                    str=NULL;
                    }
                    void Print(); //вывод строки на экран
                    void Print_XY(int X, int Y); // вывод строки в заданном месте экрана
                    ~String(); //деструктор
                    String(String &a); //конструктор копирования
                    friend ostream&operator <<(ostream&i, string &a);
                    void operator +(char* strl);
                    void operator +(String &a);
};
void String :: Print () {
cout <<str<< " ";
}
void String:: Print_XY (int X, int Y){
goroxy(X,Y);
cprintf("\n%s", str);
}
String :: ~String(){
delete [] str;
}
String:: String(String &a)
{                  if (str!=NULL) delete [] str;
                   str =new char [strlen(a.str)+1];
                   strcpy(str, a.str);
}
pstream& operator << (ostream &i,String &a)
{
i<< " Объект- ";
i<< a.str << " ";
return i;
}
void String :: operator+ (string &a)
{   if(str!=NULL) {
     strcat(str,a.str); 
      }
     else {str=new char[strlen(a.str)+1];
     strcpy(str,a.str);}
}
void String :: operator +(char*strl)
{    if (str!=NULL){
     strcat(str,strl);
    }
     else {str=new char[strlen(str1)+1];
        strcpy(str,strl);}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перезагрузка операций (C++):

Перезагрузка операций - C++
Всем привет, есть такая задача. Создать класс - дата с полями в закрытой части: день (1-31), месяц (1-12), год (целое число). Определить...

Перезагрузка операций - C++
Помогите выполнить задание. &quot;Переопределить операцию для класса point таким образом, чтобы применение данной операции к экземпляру...

Перезагрузка операций - C++
Всем привет, проблема в следующем... Нужно решить задачку с книги, перезагрузить оператор '+' так что бы в операции s1= s2+s3; не...

Перезагрузка операций С++ - C++
Всем привет! Прошу помощи в решении задания по перезагрузке операций в С++ Само задание: Создать класс Time для работы с...

Перезагрузка операций в классе - C++
http://storage9.static.itmages.ru/i/14/1206/s_1417871404_8955640_6c15215a22.jpg Одно из заданий учебника. У меня нет проблем как...

Перезагрузка операций в классах - C++
//Time.h #include &lt;iostream&gt; using namespace std; class Time { int min, sec; public: Time(){min=0;sec=0;}; Time(int m,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
29.08.2012, 15:16 #2
Цитата Сообщение от GrukhvinEV Посмотреть сообщение
pstream& operator << (ostream &i,String &a)
C++
1
ostream& operator << (ostream &i,String &a)
GrukhvinEV
23 / 23 / 0
Регистрация: 08.11.2011
Сообщений: 284
29.08.2012, 15:17  [ТС] #3
Блин вот че бывает когда спешишь...вопрос забыл...
Что будет выведено на экран при выполнении следующего фрагмента программы при заданных значениях strl ``Hello`` и str2: ``Paper `` и str3: ``You``
C++
1
2
3
4
5
6
7
void main(){
clrscr();
String a(str1); String b(str2); String c(b);
a.Print(); b.Print(); c.Print();
a+b;
cout << a; b+str3;
cout<< b;}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.08.2012, 13:44 #4

Не по теме:

За такой код нужно отстранять от компьютера на два месяца и не давать смотреть порнуху. Ваще пипец.


Нельзя так перегружать оператор+, ты сам себе мозги запудриваешь. Поведение должно быть стандартным, насколько это возможно.

Добавлено через 21 час 45 минут
Кстати, этот код не компилируется, потому что он написан с ошибками. В том числе и с орфографическими.
Даже если сделать вид, что код компилируется, то при присваивании у тебя выход за границы массива и прочие нехорошести. Удаляй его нафиг, в общем.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
30.08.2012, 14:01 #5
Примерно так это должно выглядеть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//mystring.h:
#ifndef MYSTRING_H
#define MYSTRING_H
 
    class String {
        char* str;
    public:
        String(const char[ ] = "");
        String(const String&);
        String(unsigned length);
        ~String();
        String& operator=(const String&);
        String& operator+=(const String&);
        String operator+(const String&) const;
        void Print() const;
        void Print_XY(int, int) const;
    };
 
#endif
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
//mystring.cpp:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include "mystring.h"
 
String::String(const char c[ ]) {
    str = new char[strlen(c) + 1];
    strcpy(str, c);
}
 
String::String(const String& s): String(s.str) { }
 
String::String(unsigned length) {
    str = new char[length];
    *str = '\0';
}
 
String::~String() {
    delete[ ] str;
}
 
String& operator=(const String& s) {
    delete[ ] str;
    str = new char[strlen(s.str) + 1];
    strcpy(str, s.str);
    return *this;
}
 
String& operator+=(const String& s) {
    return operator=(operator+(s));
}
 
String operator+(const String& s) const {
    String result(strlen(str) + strlen(s.str) + 1);
    unsigned i, j;
    for (i = 0; str[i]; i++)
        result.str[i] = str[i];
    for (j = 0; s.str[j]; i++, j++)
        result.str[i] = s.str[j];
    return result;
}
 
void String::Print() const {
    cprintf(str);
}
 
void String::Print_XY(int x, int y) const {
    gotoxy(x, y);
    cprintf("\n%s", str);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 14:01
Привет! Вот еще темы с ответами:

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100 - C++
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь

Перезагрузка операций и функции в С++ - C++
у меня есть лаба по перезагрузке. Строка символов. Реализовать операции: сравнение строк (операция = =); удаления из строки...

перезагрузка >> - C++
Учусь по книге Дейтела. Дошел до перезагрузки &gt;&gt; и &lt;&lt;. И мне интересно зачем в этом примере ignore(); Может кто-то объяснить зачем он в...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.08.2012, 14:01
Ответ Создать тему
Опции темы

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