Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевод числа из любой системы счисления в десятичную https://www.cyberforum.ru/ cpp-beginners/ thread2363227.html
Привет всем ,помогите исправить программу ,которая должна переводить число из любой системы счисления в десятичную. #include<iostream> #include<cmath> #include <cstring> using namespace std;...
C++ Найти наименьший элемент в каждой строке матрицы
В общем проблема такая.Задана действительная матрица aij размерности n×m. Написать программу, которая определяет числа b1, b2, …, bn, равные наименьшим значениям элементов строк матрицы. у меня...
пауза консольного приложения C++
что не так с кодом? он дает записывать в файл но при первой строчке он просто выдает "?" без кд и в файл в итоге ничего не записывается,тему переименуйте пожалуйста #include "stdafx.h" #include...
C++ Программа-список Сделать программу с помощью массивов, которая содержит список из определенных значений. В список можно добавить массив и можно удалить. Пример: Выберите: 1. Показать список. 2. Добавить. 3.... https://www.cyberforum.ru/ cpp-beginners/ thread2363199.html
C++ Рекурсия: количество способов представления числа N через сумму слагаемых https://www.cyberforum.ru/ cpp-beginners/ thread2363197.html
Доброго времени суток. Нужна помощь с задачей. Условие ниже: На ввод подаётся натуральное число N. Написать программу с помощью рекурсивной функции, которая будем выводить количество способов...
C++ Заданы фамилия, имя, отчество; вывести длины каждого из трех слов
Ребята помогите!!! Ввести свою фамилию, имя и отчество как одно текстовое дано. Написать программу выводу длины каждого из трех слов .. Решить поставленную задачу используя функции стандартной...
Найти самое длинное слово в тексте C++
Ввести текст с клавиатуры и найти в нем самое длинное слово. Помогите :cry:
C++ Программа выдаёт 4 ответа почему? #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); long ch1, ch2, zn1, zn2, x, y, a, b, c, d, i = 0; char z = 0; cout << "Калькулятор дробей!" << endl;... https://www.cyberforum.ru/ cpp-beginners/ thread2363192.html
C++ Перемещение по файлу https://www.cyberforum.ru/ cpp-beginners/ thread2363166.html
Добрый день,такой вопрос. Мне надо считать определенные данные из файла. Мне известны их смещения и длина. Приложил пример вывода и то,что я вывел так понимаю,что надо считывать их через fseek...
C++ Записать формулу синтаксисом C++ Помогите на языке с++ написать формулу https://www.cyberforum.ru/ cpp-beginners/ thread2363146.html
141 / 90 / 34
Регистрация: 30.01.2018
Сообщений: 463
05.12.2018, 04:06 0

Создать класс, описывающий целое число

05.12.2018, 04:06. Просмотров 562. Ответов 3
Метки (Все метки)

Ответ

Ой как все вывернуто, давайте разбираться.
Во-первых, пора бы переходить к С++ и не цепляться за С (функции scanf, printf отлетают напрочь)
Начнем с класса:
Во-первых, зачем заполнять массив в цикле, если это можно сделать на этапе конструирования объекта, то есть из конструктора уходит цикл. Получаем нечто такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstring>
using std::string;
class numeric
{
    private:
    string str;
    public:
        numeric(string &&s)
        {
            str=s;
        }
        ~numeric(){}
};
int main() 
{
    numeric a{"252141353525215"};
}
Посмотрите, как сократился код!
Теперь разберемся с функциями класса.
Начнем с sumdigit(). Во-первых, в ней мы должны сложить все элементы нашего числа, а не где-то в конструкторе. Каждая функция должна выполнять то, что от нее требуется. Некорректно также выводить значение прямо в sumdigit(), лучше сделать ее булевой, а в main() уже плясать от этого. То есть получим это:

C++
1
2
3
4
5
6
7
bool multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        }
Из вашего кода я понял, что желательно возвращать сумму, для этого сделаем ф-цию getSum():
C++
1
2
3
4
5
6
7
long long getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }
В итоге получаем такой код:
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
#include <iostream>
#include <cstring>
using namespace std;
class numeric
{
    private:
    string str;
    
    public:
        numeric(const string &&s)
        {
            str=s;
        }
        ~numeric(){}
        bool multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        
        }
        long long getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }
};
int main() 
{
    numeric a{"343"};
    std::cout<<a.multipleOfNine()<<' '<<a.getSum()<<std::endl;
}
Если разбивать по файлам, то грамотнее сделать так:
main.cpp
C++
1
2
3
4
5
6
7
#include <iostream>
#include "numeric.hpp"
int main() 
{
    numeric a{"343"};
    std::cout<<a.multipleOfNine()<<' '<<a.getSum()<<std::endl;
}
numeric.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string>
using std::string;
class numeric
{
    private:
    string str;
    
    public:
        numeric(const string &&s);
        ~numeric();
        bool multipleOfNine();
        long long getSum() const;
};
numeric.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "numeric.hpp"
 
numeric::numeric(const string &&s)
        {
            str=s;
        }
numeric::~numeric(){}
bool numeric::multipleOfNine()
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum%9? 0 : 1;
        
        }
long long numeric::getSum() const
        {
            long long sum=0;
            for(auto a:str)
              sum+=a-'0';
            return sum;
        }


Вернуться к обсуждению:
Создать класс, описывающий целое число
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2018, 04:06
Готовые ответы и решения:

Создать классы, описывающий прямоугольники и класс-наследник, описывающий прямоугольные параллепипеды
Создать классы, описывающий прямоугольники. Найти площадь прямоугольника. Создать класс-наследник,...

Создать класс, описывающий треугольник, и наследник, описывающий прямые треугольной призмы
Создать класс описывающий треугольник. найти площадь треугольника. создать класс наследник,...

Создать класс, содержащий символ, вещественное число и указатель на целое число
Создать класс: Данные класса- символ, вещественное число, указатель на целое число. Методы класса-...

Определить класс: длинное целое число. Создать конструкторы и деструктор
Условие такое: определить класс: длинное целое число. Для сохранения числа использовать линейный...

3
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.