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

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

Восстановить пароль Регистрация
 
GrukhvinEV
23 / 23 / 0
Регистрация: 08.11.2011
Сообщений: 288
29.08.2012, 14:54     Перезагрузка операций #1
Класс 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);}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Intel~lect
 Аватар для 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
Сообщений: 288
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++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.08.2012, 13:44     Перезагрузка операций #4

Не по теме:

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


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

Добавлено через 21 час 45 минут
Кстати, этот код не компилируется, потому что он написан с ошибками. В том числе и с орфографическими.
Даже если сделать вид, что код компилируется, то при присваивании у тебя выход за границы массива и прочие нехорошести. Удаляй его нафиг, в общем.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 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);
}
Yandex
Объявления
30.08.2012, 14:01     Перезагрузка операций
Ответ Создать тему
Опции темы

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