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

Создать свой тип данных

29.09.2016, 20:42. Показов 12082. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс Bignum, который хранит большие числа:
C++
1
2
3
4
class Bignum
{
     string digits; // Число
};
Возможно ли сделать вот так:
C++
1
2
3
       Bignum b(@4487612165); 
       // или
       b = @133+@559098;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.09.2016, 20:42
Ответы с готовыми решениями:

Не получается создать свой тип данных
Всем привет! Подскажите почему компилятор ругается на эти три строчки? MyVector2D():x(0),y(0){} MyVector2D(float x, float...

Создать свой целочисленный тип данных
Здравствуйте, у меня возник вопрос, можно ли создать например целочисленный тип данных, который может принимать только значения от 1 до 4 и...

Как создать свой целочисленный тип данных с пределом от 0 до 500
Доброе утро. Кто может подсказать, как создать персональный тип данных. Задумка вот в чем. Нужна программа, где по нажатию на...

5
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.09.2016, 20:46
IlyaMakyha, нет, так невозможно. Только так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
 
class Bignum
{
     std::string digits; // Число
};
 
int main()
{
    Bignum b("@4487612165");
    // или
    b = "@133+@559098";
 
    return 0;
}
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
29.09.2016, 20:58
Цитата Сообщение от IlyaMakyha Посмотреть сообщение
Возможно ли сделать вот так:
А зачем?
В смысле зачем собачки перед литералами?
Можно же просто
C++
1
2
3
Bignum b(4487612165); 
       
b = 133 + 559098;
для этого необходимо будет перегрузить конструктор и оператор присваивания для соответствующих целых типов.

Если же нужно будет задавать целое число, которое не помещается в стандартные типы, то да, в виде строки придется задавать, затем переводить ее во внутреннее представление твоего класса.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.09.2016, 21:15
Цитата Сообщение от DrOffset Посмотреть сообщение
перегрузить конструктор и оператор присваивания
Цитата Сообщение от DrOffset Посмотреть сообщение
задавать целое число, которое не помещается в стандартные типы, то да, в виде строки придется задавать
DrOffset, опередил меня )))

IlyaMakyha, как-то так:
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
#include <iostream>
#include <string>
 
class Bignum
{
    std::string digits_;
 
public:
    Bignum()
    {
        digits_ = "";
    }
 
    explicit Bignum( std::string d ) : digits_( d )
    {}
 
    explicit Bignum( const char* d ) : digits_( d )
    {}
 
    Bignum( const Bignum& b )
    {
        digits_ = b.digits_;
    }
 
    Bignum& operator=( const Bignum& b )
    {
        if ( this != &b )
            digits_ = b.digits_;
 
        return *this;
    }
 
    Bignum& operator=( const std::string& b )
    {
        if ( &digits_ != &b )
            digits_ = b;
 
        return *this;
    }
 
    friend void operator<<( std::ostream& os, const Bignum& b )
    {
        os << b.digits_ << "\n";
    }
};
 
int main()
{
    Bignum b( "@4487612165" );
    std::cout << b;
 
    // или
 
    b = "@133+@559098";
    std::cout << b;
 
    return 0;
}
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
29.09.2016, 21:21
Цитата Сообщение от gru74ik Посмотреть сообщение
C++
1
2
3
4
friend void operator<<( std::ostream& os, const Bignum& b )
    {
        os << b.digits_ << "\n";
    }
Вроде возвращают os, а не void?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.09.2016, 21:32
GbaLog-, можно как я написал, если цепочки вызовов не планируешь делать.

Добавлено через 3 минуты
GbaLog-, хотя, конечно, каноничный вариант такой:
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
#include <iostream>
#include <string>
 
class Bignum
{
    std::string digits_;
 
public:
    Bignum()
    {
        digits_ = "";
    }
 
    explicit Bignum( std::string d ) : digits_( d )
    {}
 
    explicit Bignum( const char* d ) : digits_( d )
    {}
 
    Bignum( const Bignum& b )
    {
        digits_ = b.digits_;
    }
 
    Bignum& operator=( const Bignum& b )
    {
        if ( this != &b )
            digits_ = b.digits_;
 
        return *this;
    }
 
    Bignum& operator=( const std::string& b )
    {
        if ( &digits_ != &b )
            digits_ = b;
 
        return *this;
    }
 
    friend std::ostream& operator<<( std::ostream& os, const Bignum& b )
    {
        os << b.digits_ << "\n";
 
        return os; // Бодхидхарма одобряет
    }
};
 
int main()
{
    Bignum b( "@4487612165" );
    std::cout << b;
 
    b = "@133+@559098";
    Bignum c( "O-LO-LO-666" );
    
    std::cout << b << c; // дух Дзен с домино и блудницами
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2016, 21:32
Помогаю со студенческими работами здесь

Как создать свой собственный тип на C++?
Здравствуйте!!! Возник вопрос как создать свой собственный тип на С++ который включат такие типы как int, string, double?

Как реализовать свой тип данных
Здравсвтуйте,подскажите пожалуйста как реализовать с с++ свой тип данных. Допустим хочу завести массив,где каждому arr будет соответсвовать...

Свой тип данных для перегрузки функций
Добрый день! Имеется широта и долгота - все FLOAT. Хочу сделать пару функций с одинаковым названием, но с разной реализацией для разных...

Свой тип данных позволяющий хранить числа разрядностью в <= 30
Доброго времени суток! Возникла потребность иметь программу позволяющую производить арифметические действия с числами, разрядность...

Создать свой поток данных
Не могу понять, возможно ли как то создать свой поток данных? Знаю есть файловые потоки, cin cout cerr, а как быть если мне нужен поток...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru