Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59

класс strtype. перегрузка присваивания и сложения

02.02.2013, 19:06. Показов 2318. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
объясните, пожалуйста, что не так:

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
# include <iostream>
using namespace std;
 
class strtype
{
    char *p;
    int len;
public:
    strtype(char *c){
        len=strlen(c);
        p = new char[len];
        if (!p)
        {
            cout<<"Memory allocation error!!!";
            exit(1);
        }
        strcpy(c, p);
    }
 
    ~strtype(){ delete []p; }
    void show();
 
    strtype operator= (strtype &s);
    friend strtype operator+ (strtype s1, strtype s2);
};
 
void strtype :: show(){
    for (int i = 0; i < len; ++i)
    {
        cout<<p[i];
    }
    cout<<endl;
}
 
strtype strtype :: operator= (strtype &s){
    if (s.len>len)
    {
        delete p;
        p= new char[s.len+1];
        if (!p)
        {
            cout<<"Memory allocation error!!!";
            exit(1);
        }
    }
    len=s.len;
    strcpy(s.p, p);
    return *this;
}
 
strtype operator+ (strtype s1, strtype s2){
    strtype tmp(" ");
    tmp.len=s1.len+s2.len;
    tmp.p=s1.p+s1.p;
    return tmp;
}
 
int main(int argc, char const *argv[])
{
    strtype a1("Wolf"), a2("Rabbit"), a3("_"), a4(" ");
    a1.show(); a2.show(); a3.show(); 
    a4=a2+a3+a1;
    a4.show();
 
    cin.get(); cin.ignore();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2013, 19:06
Ответы с готовыми решениями:

Перегрузка операции присваивания и сложения
Необходимо составить описание класса для определения одномерных массивов целых чисел. Границы индексов можно задавать произвольно, т.е....

Класс String, перегрузка сложения и вычитания
Здравствуйте! Нужно сделать класс String с перегруженными операторами ==; &lt;;&gt;;+ и - вот код Header #ifndef STRING_H ...

Перегрузка операторов сложения и присваивания
Пишу класс для длинной арифметики, перегружаю операторы. Числа храню в массивах по 8 uint. В заголовке: uint256(QString init);...

7
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
02.02.2013, 19:58
как минимум, нужен конструктор копирования.
0
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
03.02.2013, 14:05  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
нужен конструктор копирования.
зачем? у меня же присваивание перегружено

Добавлено через 2 часа 29 минут
Цитата Сообщение от Dummy_1 Посмотреть сообщение
присваивание перегружено
правильно ли?

Добавлено через 2 часа 2 минуты
выше
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
03.02.2013, 14:35
Цитата Сообщение от Dummy_1 Посмотреть сообщение
зачем? у меня же присваивание перегружено
Ну и что с того? При создании объекта вызывается конструктор, а не оператор присваивания.
Цитата Сообщение от Dummy_1 Посмотреть сообщение
правильно ли?
Стоит аргументом принимать ссылку на константу (иначе не получиться вызвать оператор для константного объекта), а возвращать ссылку, а не значение.
0
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
03.02.2013, 14:38  [ТС]
ну кто-нибудь объясните мне
разобраться охота )

Добавлено через 2 минуты
gray_fox, ясно.
а как синтаксис выглядит?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
03.02.2013, 14:40
Цитата Сообщение от Dummy_1 Посмотреть сообщение
а как синтаксис выглядит?
Прототип конструктора копирования? Так:
C++
1
strtype(strtype const& rhs)
1
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
03.02.2013, 14:52  [ТС]
gray_fox, фигня какая-то получилась.

вот код конструктора копирования
C++
1
2
3
4
5
6
7
8
9
strtype :: strtype (strtype const &c){
    p=new char[c.len];
    if (!p)
        {
            cout<<"Memory allocation error!!!";
            exit(1);
        }
    strcpy(c, p);
}
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
03.02.2013, 15:38
Цитата Сообщение от Dummy_1 Посмотреть сообщение
p=new char[c.len];
len - длинна строки? Тогда
C++
1
p = new char[c.len + 1];
иначе завершающий '\0' некуда будет писать.
Цитата Сообщение от Dummy_1 Посмотреть сообщение
strcpy(c, p);
C++
1
strcpy(p, c.p);
Цитата Сообщение от Dummy_1 Посмотреть сообщение
C++
1
2
3
4
5
6
7
strtype(char *c){
   len=strlen(c);
   p = new char[len];
   if (!p) {
      cout<<"Memory allocation error!!!"; exit(1);
   }
    strcpy(c, p); }
C++
1
2
3
4
5
strtype(char const* c) : len(strlen(c)) {
   p = new char[len + 1];
   if (!p) { //... }
   strcpy(p, c);
}
Добавлено через 9 минут
Цитата Сообщение от Dummy_1 Посмотреть сообщение
C++
1
2
3
4
5
6
strtype operator+ (strtype s1, strtype s2){
   strtype tmp(" ");
   tmp.len=s1.len+s2.len;
   tmp.p=s1.p+s1.p;
   return tmp;
}
Как-нибудь уж так хотя бы, хотя тоже криво:
C++
1
2
3
4
5
6
7
8
9
strtype operator +(strtype const& s1, strtype const& s2) {
   strtype result("");
   delete[] result.p;
   int length = s1.len + s2.len;
   result.len = length;
   result.p = new char[length + 1];
   strcpy(strcpy(p, s1.p), s2.p);
   return result;
}
Добавлено через 27 минут
Да, кстати не сразу заметил: оператор new/new[], в отличии от malloc/calloc/realloc, при неудачном выделении не возвращает ноль, а выбрасывает исключение std::bad_alloc, так что если охота проверить, то надо ловить это исключение:
C++
1
2
3
try {
   p = new char[len + 1];
} catch (std::bad_alloc const& error) { /* ... */ }
или использовать nothrow new[]:
C++
1
2
p = new (std::nothrow) char[len + 1];
if (!p) { /* ... */ }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2013, 15:38
Помогаю со студенческими работами здесь

Операторы сложения и присваивания
здравствуйте. допустим у меня есть класс A. В этом классе содержатся функции : A operator=(A &amp;ob); friend A operator+(A...

Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц. Сложения матрицы с числом и
Написать свой класс, реализующий матричную арифметику, операции сложения и умножения матриц. Сложения матрицы с числом и умножения матрицы...

Перегрузка оператора присваивания
Доброго времени суток! Возник вопрос по поводу перегрузки оператора присваивания. Пример перегрузки по канону: class Integer { ...

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

Перегрузка оператора присваивания
Доброго времени суток всем! Никак не могу правильно написать перегрузку оператора присваивания. При создании одного нового элемента...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru