С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338

не работает перегрузка operator/ и operator* для символьных массивов

10.06.2020, 17:36. Показов 2268. Ответов 41

Студворк — интернет-сервис помощи студентам
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
 
using namespace std;
class myclass
{
private:
    int sizemass;
    char* arr;
public:
    myclass(int size)
    {
        cout << "Конструктор " << this << endl;
        sizemass = size;
        arr = new char[500];
    }
    ~myclass()
    {
        cout << "Деструктор " << this << endl;
        sizemass = 0;
    }
    void AutoFill()
    {
        cout << "Введите " << sizemass << " значений" << endl;
        for (size_t i = 0; i < sizemass; i++)
        { 
            //arr.push_back((double)(rand()) / RAND_MAX * i);
            cin >> arr[i];
        }
        cout << "Массив был автоматически заполнен" << endl;
    }
    void Show()
    {
        for (size_t i = 0; i < sizemass; i++)
        {
            cout << "\tЭлемент " << i+1 << ": " << arr[i] << endl;
        }
    }
    int getSize()
    {
        return sizemass;
    }
 
    friend myclass operator*(myclass& obj, int value);
    friend myclass operator/(myclass& obj, int value);
 
};
 
myclass operator*(myclass& obj, int value)
{
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int tmp;
        char result[50];
        int tmp1;
        tmp = atoi(&obj.arr[i]);
        tmp1 = tmp * value;
        _itoa_s(tmp1, result, 16);
        obj.arr[i] = result[45];
    }
    return obj;
}
myclass operator/(myclass& obj, int value)
{
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int tmp;
        char result[50];
        int tmp1;
        tmp = atoi(&obj.arr[i]);
        tmp1 = tmp / value;
        _itoa_s(tmp1, result, 16);
        obj.arr[i] = result[45];
    }
    return obj;
}
 
 
int main()
{
    setlocale(LC_ALL, ""); 
    srand(time(NULL));
    short int size, number; 
    char choise; 
    cout << "Введите размерность массива: " << endl; 
    cin >> size; 
    cout << "Размерность массива = " << size << endl;
    myclass obj(size);
    obj.AutoFill();
    cout << "Массив до операции: " << endl;
    obj.Show();
    cout << "Введите число для операции:" << endl; cin >> number;
    cout << "Выберите операцию над массивом '*' - умножение, '/' - деление, '?' - посмотреть значения вектора, 'e' - выход" << endl;
    do
    {
        cin >> choise;
        switch (choise)
        {
        case '*': obj = obj * number; cout << "Operation " << choise << " was finished" << endl; break;
        case '/': obj = obj / number; cout << "Operation " << choise << " was finished" << endl; break;
        case '?':  obj.Show(); cout << "Operation " << choise << " was finished" << endl; break;
        case 'e':  cout << "Operation " << choise << " was finished" << endl; return 0; break;
        default: cout << "!!!!Выберите операцию над массивом '*' - умножение, '/' - деление, '?' - посмотреть значения вектора, 'e' - выход" << endl; cin >> choise;
        } 
    } while (choise != 0);
    
   
 
 
}


Ошибка подозреваю на моменте конвертирования в тип char, как это можно исправить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2020, 17:36
Ответы с готовыми решениями:

Перегрузка операторов operator> и operator* для чисел в разных системах счисления
Мне нужно Перегрузить операции&gt; (сравнение двух целых чисел с учетом системы счисления), * (произведение таких чисел). Но я не могу понять...

Перегрузка operator+ для массивов
Здравствуйте. Мне надо решить следующую задачу: сложить два массива в один, используя перегрузку операторов(перегрузить operator+). У...

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот кажется что есть и другое решение. Попытался...

41
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
10.06.2020, 20:04  [ТС]
Студворк — интернет-сервис помощи студентам
Функция atoi() конвертирует строку, на которую указывает параметр str, в величину типа int. Строка должна содержать корректную запись целого числа. В противном случае возвращается 0.

Циклы поправил

Размер массива char result - взят с головы


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
97
98
99
100
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
 
using namespace std;
class myclass
{
private:
    int countmass;
    int sizemass;
    char* arr;
public:
    myclass(int size)
    {
        cout << "Конструктор " << this << endl;
        sizemass = size;
        countmass = 500;
        arr = new char[countmass];
    }
    ~myclass()
    {
        cout << "Деструктор " << this << endl;
        sizemass = 0;
        delete[] arr;
    }
    void AutoFill()
    {
        cout << "Введите " << sizemass << " значений" << endl;
        for (size_t i = 0; i < sizemass; i++)
        { 
            //arr.push_back((double)(rand()) / RAND_MAX * i);
            cin >> arr[i];
        }
        cout << "Массив был автоматически заполнен" << endl;
    }
    void Show()
    {
        for (size_t i = 0; i < sizemass; i++)
        {
            cout << "\tЭлемент " << i+1 << ": " << arr[i] << endl;
        }
    }
    int getSize()
    {
        return sizemass;
    }
 
    friend myclass operator*(myclass& obj, int value);
    friend myclass operator/(myclass& obj, int value);
    //friend myclass operator=(myclass& obj, myclass& obj2);
 myclass(const myclass& obj) : countmass(obj.countmass) //  Обязательный копиконструктор (раз есть деструктор)
{
    arr = new char[obj.countmass];
    for (size_t i = 0; i < obj.countmass; i++)
    {
        arr[i] = obj.arr[i];
    }
}
 
 myclass& operator = (const myclass& obj) // Обязательный оператор присвоения (раз есть деструктор)
 {
     if (this == &obj)
         return *this; // присвоение самому себе, ничего делать не надо
 
     delete[] arr;
 
     arr = new char[obj.sizemass];
     for (int i = 0; i < obj.sizemass; i++)
     {
         arr[i] = obj.arr[i];
     }
 
     return *this;
 }
};
 
myclass operator*(myclass& obj, int value)
{
    myclass res(obj);
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int tmp,tmp1;
        char result[50];
        tmp = atoi(&res.arr[i]);
        tmp1 = tmp * value;
        _itoa_s(tmp1, result, 16);
        res.arr[i] = result[45];
    }
    return res;
}
myclass operator/(myclass& obj, int value)
{
 
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        obj.arr[i] = obj.arr[i] / value;
    }
    return obj;
}
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
10.06.2020, 20:09
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Размер массива char result - взят с головы
45 - это не размер массива. Размер массива у вас указан при объявлении и он равен 50. А 45 - это индекс. Вас спрашивают: зачем он вам тут, почему именно такой, чего вы хотели этим добиться?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
10.06.2020, 20:18
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Функция atoi() конвертирует строку, на которую указывает параметр str, в величину типа int. Строка должна содержать корректную запись целого числа. В противном случае возвращается 0.
Совершенно верно. Строкой (С-строкой) для функции atoi является последовательность символов, завершающаяся символом \0. Я не вижу в вашей последовательности символов символа \0. То есть строкой она не является. А вы ее суeте в atoi

Но даже если бы там был этот \0... У вас есть строка 12345. Вы зачем-то применяете atoi к 12345, 2345, 345, 45, 5... В чем смысл этих странных загадочных манипуляций?

После itoa этого вы зачем-то лезете в 45 символ результата... Число длиной в 45 символов в 16 системе счисления никак в результате itoa у вас получиться не могло. Это чушь какая-то.

Что вы пытаетесь всем этим сделать? Это совершенно непостижимо человеческим умом. Телепатов тут нет. Пока вы внятно не объясните, что вы пытаетесь всем этим сделать, никто вам тут помочь не сможет.

Добавлено через 8 минут
Ваш конструктор копирования и оператор присваивания по-прежнему игнорируют поле sizemass.
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
10.06.2020, 21:36  [ТС]
Благодарю, с индексом действильно глупо вышло. Получаю верное значение в
C++
1
res.arr[i]=result[0]
если в result записывается число длинной в один символ. (2*2,2*4,3*2). Проблема выходит на моменте когда я пытаюсь в
C++
1
res.arr[i]
записать результат ( через цикл конечно ) длинной более одного символа. Это можно исправить написание пользовательского типа данных по типу:
C++
1
2
3
4
struct mychar
{
char mas[5];
};
а в myclass вместо массива char - использовать mychar arr[sizemass]?


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
   myclass(const myclass& obj) : sizemass(obj.sizemass) //  Обязательный копиконструктор (раз есть деструктор)
    {
        arr = new char[obj.sizemass];
        for (size_t i = 0; i < obj.sizemass; i++)
        {
            arr[i] = obj.arr[i];
        }
    }
 
    myclass& operator = (const myclass& obj) // Обязательный оператор присвоения (раз есть деструктор)
    {
        if (this == &obj)
            return *this; // присвоение самому себе, ничего делать не надо
 
        delete[] arr;
 
        arr = new char[obj.sizemass];
        for (int i = 0; i < obj.sizemass; i++)
        {
            arr[i] = obj.arr[i];
        }
 
        return *this;
    }
};
 
myclass operator*(myclass& obj, int value)
{
    myclass res(obj);
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int tmp, tmp1;
        char result[6];
        tmp = atoi(&res.arr[i]);
        tmp1 = tmp * value;
        _itoa_s(tmp1, result, 16);
        res.arr[i] = result[0];      
    }
    return res;
}
myclass operator/(myclass& obj, int value)
{
    myclass res(obj);
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int tmp, tmp1;
        char result[6];
        tmp = atoi(&res.arr[i]);
        tmp1 = tmp / value;
        _itoa_s(tmp1, result, 16);
        res.arr[i] = result[0];
    }
    return res;
}
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
10.06.2020, 22:34
SkYMaaN, Если вы будете игнорировать замечания TheCalligrapher,

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У вас есть строка 12345. Вы зачем-то применяете atoi к 12345, 2345, 345, 45, 5... В чем смысл этих странных загадочных манипуляций?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Строкой (С-строкой) для функции atoi является последовательность символов, завершающаяся символом \0. Я не вижу в вашей последовательности символов символа \0. То есть строкой она не является. А вы ее суeте в atoi
то я не буду отвечать. Потому что нет гарантий, что вы не будете игнорировать и мои замечания. А мне время просто так тратить не хочется. Уж извините.
1
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
10.06.2020, 23:04  [ТС]
Прошу прощения, мне казалось я это исправил и решил не отвечать.
Цитата Сообщение от DrOffset Посмотреть сообщение
У вас есть строка 12345. Вы зачем-то применяете atoi к 12345, 2345, 345, 45, 5... В чем смысл этих странных загадочных манипуляций?
- Я делаю проход по всему массиву char, достаю каждый элемент, в этом смысл. ( я так вижу, могу ошибаться )
Цитата Сообщение от DrOffset Посмотреть сообщение
Строкой (С-строкой) для функции atoi является последовательность символов, завершающаяся символом \0. Я не вижу в вашей последовательности символов символа \0. То есть строкой она не является. А вы ее суeте в atoi
- На сайте где я смотрел пример использования этой функции последний символ не инициализировался как нуль терминатор'\0',
Я ведь в функции использую один символ ,А не строку
C++
1
tmp = atoi(&res.arr[i]) * value
;
вот пример(может я опять что-то путаю):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Следующая программа читает два целых числа и выводит их сумму:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char num1[80], num2[80];
printf("Enter first number: ");
gets(num1);
printf("Enter second number: ");
gets(num2);
printf("The sum is: %d", atoi(num1)+atoi(num2));
return 0;
}
Добавлено через 18 минут
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Строкой (С-строкой) для функции atoi является последовательность символов, завершающаяся символом \0. Я не вижу в вашей последовательности символов символа \0. То есть строкой она не является. А вы ее суeте в atoi
Так будет верно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
myclass operator*(myclass& obj, int value)
{
    myclass res(obj);
    for (size_t i = 0; i < obj.sizemass; i++)
    {
                   char str[1];
                   str[1] = '\0';
                   str[0] = res.arr[i];
        int tmp;
        char result[250];
        tmp = atoi(&str[0]) * value;
        _itoa_s(tmp, result, 10);
        res.arr[i] = result[0];
    }
    return res;
}
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
10.06.2020, 23:52
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Я ведь в функции использую один символ ,А не строку
Конечно нет. Функция ждет строку. И указатель, который вы передали, интерпретируется как указатель на строку. Даже если это на самом деле не так. Ваша задача обеспечить, чтобы это было все-таки так. Иначе работать будет неверно.
Обратите внимание на комментарий еще раз:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У вас есть строка 12345. Вы зачем-то применяете atoi к 12345, 2345, 345, 45, 5...
Добавлено через 3 минуты
Цитата Сообщение от SkYMaaN Посмотреть сообщение
char str[1];
C++
1
char str[2];
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
10.06.2020, 23:56  [ТС]
C++
1
2
3
string str;
str = res.arr[i];
Верно? Но как тогда указать нуль терминатор на последний элемент? Ведь если я напишу str[256] - Это будет 256 строка? Или строку нужно перебирать по символу?
Добавлено через 2 минуты
Заработало, благодарю. Столкнулся с новой проблемой, если результатирующий элемент не одно-символьный, а я пытаюсь его записать в один символ. Как с этим быть? Сообственный тип данных писать, по типу:
C++
1
2
3
4
struct mychar
{
 char mas[5];
};
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
10.06.2020, 23:58
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Сообственный тип данных писать, по типу
std::string есть такой тип уже.
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
10.06.2020, 23:59  [ТС]
в постановке задачи именно char нужен(((
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
10.06.2020, 23:59
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Так будет верно?
С учетом исправления выше (массив нужен размера 2, а не 1), да.


Однако все еще не ясно что это такое вообще? Например, что вы делаете, если результат не помещается в char? Сейчас у вас берется первый символ строкового представления результат умножения. Если длина результата умножения больше, то все равно берется только первый символ. Это то, чего вы хотели? Что это должно означать? В чем смысл?
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
11.06.2020, 00:06  [ТС]
Задача такая:
"Перегрузка операций *, / для масивов символов (Предусмотреть операции над массивами и умножения / деления массива на символ).
Массив заполняется с клавиатуры цифрами, заполняется переменная так же цифрой. Затем каждый элемент массива умножается на значение этой переменной и результат ложится обратно в массив на то же место.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.06.2020, 00:21
Цитата Сообщение от SkYMaaN Посмотреть сообщение
"Перегрузка операций *, / для масивов символов (Предусмотреть операции над массивами и умножения / деления массива на символ).
Массив заполняется с клавиатуры цифрами, заполняется переменная так же цифрой. Затем каждый элемент массива умножается на значение этой переменной и результат ложится обратно в массив на то же место.
Ага. И судя по этому:
Цитата Сообщение от SkYMaaN Посмотреть сообщение
Столкнулся с новой проблемой, если результатирующий элемент не одно-символьный, а я пытаюсь его записать в один символ. Как с этим быть?
мое предположение
Цитата Сообщение от DrOffset Посмотреть сообщение
Например, что вы делаете, если результат не помещается в char? Сейчас у вас берется первый символ строкового представления результат умножения. Если длина результата умножения больше, то все равно берется только первый символ. Это то, чего вы хотели?
все-таки оказалось верным и вы не хотели отрезать хвост непомещающегося числа.

В таком случае ваше предложение
Цитата Сообщение от SkYMaaN Посмотреть сообщение
записать результат ( через цикл конечно ) длинной более одного символа. Это можно исправить написание пользовательского типа данных по типу:
C++
1
2
3
4
struct mychar
{
char mas[5];
};
имеет смысл. Только символов в таком элементе должно быть не 5, a std::numeric_limits<int>::digits10 + 1, если вы будете работать с типом int при умножении\делении.

Добавлено через 1 минуту
PS. в слове "digits10" нет пробела. Это движок форума сам его рисует.
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
11.06.2020, 00:28  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
numeric_limits<int>::digi ts10 + 1
Обязательно должно быть 10+1? А что это такое если простым языком?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.06.2020, 00:34
SkYMaaN, не "10", а "std::numeric_limits<int>::digits10" - эта штука вам скажет сколько максимально десятичных разрядов поместится в числе типа int. +1 для нуль-символа.

Не по теме:

Да что такое с форумом? Рисует пробел. Я его не ставил там.



Добавлено через 54 секунды
Короче, вот: https://en.cppreference.com/w/... s/digits10
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
11.06.2020, 00:37  [ТС]
Для оформления циклов ввода и вывода мне нужно значение, а я не пойму какое ставить с этой вундервафлей
C++
1
2
3
4
5
6
7
  for (size_t i = 0; i < sizemass; i++)
        {
            for (size_t j = 0; j < *количество символов в одном элементе*; j++)
            {
                cin >> arr[i].mas;
            }
        }

10? или просто писать нужный мне максимум?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.06.2020, 00:43
SkYMaaN, Вам не нужна эта "вундервафля" в цикле. И цикл этот тоже не нужен.
0
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
11.06.2020, 00:45  [ТС]
А как организовать ввод элементов с клавиатуры?
C++
1
cin.getline(arr[i].mas[j], 3);
?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.06.2020, 00:51
SkYMaaN, исправил кое-что:

Кликните здесь для просмотра всего текста
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
template <typename T>
struct charvalue
{
    char value[std::numeric_limits<T>::digits10 + 1];
};
 
class myclass
{
private:
    size_t countmass;
    size_t sizemass;
    charvalue<int> * arr;
    
public:
    explicit myclass(size_t count = 500, size_t size = 0)
        : countmass(count), sizemass(size), arr(new charvalue<int>[count])
    {
        cout << "Конструктор " << this << endl;
    }
    ~myclass()
    {
        cout << "Деструктор " << this << endl;
        delete[] arr;
    }
    
    void AutoFill(size_t size)
    {
        cout << "Введите " << size << " значений" << endl;
        for (size_t i = 0; i < std::min(size, countmass); i++)
        {
            cin >> arr[i].value;
        }
        sizemass = size;
        cout << "Массив был автоматически заполнен" << endl;
    }
    void Show() const
    {
        for (size_t i = 0; i < sizemass; i++)
        {
            cout << "\tЭлемент " << i+1 << ": " << arr[i].value << endl;
        }
    }
    
    size_t getSize() const
    {
        return sizemass;
    }
 
    friend myclass operator*(const myclass& obj, int value);
    friend myclass operator/(const myclass& obj, int value);
    
    myclass(const myclass& obj) 
        : sizemass(obj.sizemass), countmass(sizemass) //  Обязательный копиконструктор (раз есть деструктор)
    {
        arr = new charvalue<int>[obj.sizemass];
        for (size_t i = 0; i < obj.sizemass; i++)
        {
            arr[i] = obj.arr[i];
        }
    }
 
    myclass& operator=(const myclass& obj) // Обязательный оператор присвоения (раз есть деструктор)
    {
        if (this == &obj)
            return *this; // присвоение самому себе, ничего делать не надо
 
        delete[] arr;
 
        sizemass = obj.sizemass;
        countmass = sizemass;
        
        arr = new charvalue<int>[obj.sizemass];
        for (size_t i = 0; i < obj.sizemass; i++)
        {
            arr[i] = obj.arr[i];
        }
        return *this;
    }
};
 
myclass operator*(const myclass& obj, int value)
{
    myclass res(obj.sizemass, obj.sizemass);
    
    for (size_t i = 0; i < obj.sizemass; i++)
    {
        int v = atoi(obj.arr[i].value);
        v *= value;
        sprintf(res.arr[i].value, "%d", v);
    }
    
    return res;
}
 
int main()
{
    myclass test;
    
    test.AutoFill(3);
    
    test.Show();
    
    myclass res1 = test * 300;
    res1.Show();
}
1
 Аватар для SkYMaaN
25 / 19 / 8
Регистрация: 05.04.2019
Сообщений: 338
11.06.2020, 01:00  [ТС]
Спасибо большое, мой преподаватель что-то заподозрит xD
Я так понимаю, что "min" это функция?
C++
1
explicit myclass(size_t count = 500, size_t size = 0) : countmass(count), sizemass(size), arr(new charvalue<int>[count])
Можно обнаглеть с просьбой разъяснить эту строку?) С excpilcit почитал. Я так понимаю лучше так инициализировать переменные в конструкторе чем то как делал это я?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2020, 01:00
Помогаю со студенческими работами здесь

Перегрузка operator* для векторов
Подскажите пожалуйста, как перегрузить * − умножение векторов (a*b для всех i)?

Перегрузка operator= для очереди
Надо присвоить очереди i2 значения i, не пойму, вообще правильно ли делаю? template&lt;class T&gt; queue&lt;T&gt;&amp;...

Перегрузка operator>> для производного класса
Базовый класс: Taxi_Car.h: #pragma once #include&lt;string&gt; using namespace std; class Taxi_Car { string Marka;

Перегрузка operator<< для шаблонного класса
Добрый день не могу понять как реализовать перегрузку &lt;&lt; для шаблонного класса template &lt;class T&gt; class List { ...

перегрузка оператора operator< для сортировки
Никак не могу понять почему он не может отсортировать map (строка 123) правильно. operator&lt; на строке 60 #include...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru