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

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

Восстановить пароль Регистрация
 
Kate_
 Аватар для Kate_
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 43
29.03.2012, 21:35     Перегрузка операций! #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
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
#include <iostream>
#include <string>
using namespace std;
 
class Row {
    char *str;
 
public:
 
    Row();
    Row( const Row& s); 
    Row(const string);
    ~Row();
    const char* GetRow ();
 
Row& operator +(const Row& s); 
friend Row operator +(Row blabla);
 
 
 
/*
friend ostream& operator<<(ostream& const Row& str)
friend istream& operator>>(istream& s,complex& a)   
*/
 
    void get();
    void put();
    void putchar(int, char);
    void delchar(int);
    void clearstr();
    char array[256];
};
 
/*конструктор за замовчуванням*/
Row::Row() 
{str = new char[80];}
 
 
/* Деструктор */
Row::~Row(){
if(str!=NULL)
delete[] str;
str=NULL;
}
 
/*конструктор з параметрами*/
Row::Row(const string a) {
    this->str = new char[a.length()];
    for (int i = 0; i < a.length(); i++)
        str[i] = a[i];
    for (int j = a.length(); j < 80; j++) 
        str[j] = '\0';}
 
/*конструктор копіювання*/
Row::Row(const Row &str){ 
this->str = new char[80];
    for(int i = 0; i < 80; i++) {
        this ->str[i] = str.str[i];}
}
 
void Row::get() {
    cout << "\t";
    gets(str);
}
 
void Row::put() {
    puts(str);
}
 
 
void Row::putchar(int i, char z) {
    for(int j = 78; j > i-2; j--) {
        str[j+1] = str[j];
    }
    str[i-1] = z;
}
 
 
void Row::delchar(int i) {
    for(int j = i - 1; j < 80; j++) {
        str[j] = str[j+1];
    }
}
 
 
void Row::clearstr() {
    for (int i = 0; i < 80; i++) {
        str[i] = '\0';
    }
}
/*
Row& Row::operator +(const Row& s)
{
 
 
}*/
========================
Это класс текст в агригации со стрингом
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
 
#include <iostream>
using namespace std;
 
class Text {
     Row *text;
     int nums;
public:
     Text();
     Text(int);
     void add(const Row&);
     void print();
     void delstring(int);
};
 
 
/*конструктор за замовчуванням*/
Text::Text() {
this->  text = new Row[1];
    nums = 0;
}
 
 
/*конструктор з параметрами*/
Text::Text(int stramount) {
this ->text = new Row[stramount];
    nums = 0;
}
 
 
void Text::add(const Row& string) {
    text[nums] = string;
    nums++;
}
 
 
void Text::print() {
    for(int i = 0; i < nums; i++) {
        cout << "\t";
        text[i].put();
    }
}
 
 
void Text::delstring(int n) {
    for(int i = n - 1; i < nums - 1; i++) {
        text[i] = text[i+1];
    }
    text[nums - 1].~Row();
    nums--;
}
==============
а здесь я ввожу сам текст
============
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>
#include <cstdio>
#include "strings.h"
#include "text.h"
 
using namespace std;
 
int main() {
    Text t1(3);
    Row str1, str2, str3,str4;
    setlocale(LC_CTYPE,"Russian");
    cout << "Введiть текст ";
    str1.get();
    t1.add(str1);
    str2.get();
    t1.add(str2);
    str3.get();
    t1.add(str3);
    cout << "Текст 1 \n: "<<endl;;
    t1.print();
    
    /*вставка символа в рядок*/
    str1.putchar(5, 'DD');
    cout << "Текст 2 \n: ";
    t1.print();
 
    /*видалення символа з рядка*/
    str1.delchar(5);
    cout << "Текст 3: \n "<<endl;
    t1.print();
 
 
    /*очищення рядка*/
    str2.clearstr();
    cout << "Tекст 4 \n: "<<endl;
    t1.print();
 
    cin.get();
    cin.get();
    return 0;
}
Буду очень признательна,спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 21:35     Перегрузка операций!
Посмотрите здесь:

C++ перегрузка операций С++
C++ Перегрузка операций << и >>
перегрузка операций C++
C++ перегрузка операций
Перегрузка операций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
29.03.2012, 22:12     Перегрузка операций! #2
C++
1
2
3
Row operator+(const Row&) const;
friend Row operator+(const Row&, const char*);
friend Row operator+(const char*, const Row&);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Row Row::operator+(const Row& s) const
{
    Row temp;
    temp.str = new char[strlen(this->str) + strlen(s.str) + 1];
    strcpy(temp.str, str);
    strcat(temp.str, s.str);
    return temp;
}
Row operator+(const Row& s, const char* s1)
{
    return (s+Row(s1));
}
 
Row operator+(const char* s1, const Row& s)
{
    return (s+Row(s1));
}
Kate_
 Аватар для Kate_
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 43
30.03.2012, 01:34  [ТС]     Перегрузка операций! #3
спасибо, а как можно перегрузить ввод и вывод?
(>>,<<)
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
30.03.2012, 05:11     Перегрузка операций! #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
friend ostream &operator << (ostream &stream,Row R);
friend istream &operator >> (istream &stream,Row &R);
//------------------------------------------------------------------------------
ostream &operator << (ostream &stream,Row R)
{
stream<<R.str<<endl;
return stream;
}
//------------------------------------------------------------------------------
istream &operator >> (istream &stream,Row &R)
{
stream>>R.str;
return stream;
}
Yandex
Объявления
30.03.2012, 05:11     Перегрузка операций!
Ответ Создать тему
Опции темы

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