Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kernell_dll
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 9
#1

Что-то не так с классом - C++

11.01.2013, 18:18. Просмотров 257. Ответов 9
Метки нет (Все метки)

Решил попробовать себя в объектно-ориентированном программировании. Начал писать простую программку, но встретился с проблемой: не работает ничерта. Программа ещё не дописана, а ввод чисел не работает уже.

Я понимаю, объяснение кривое, поэтому вот код, а чуть ниже результат (осторожно! быдлокод):
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
#include <iostream>
#include <string>
using namespace std;
 
class Notation
{
        int radix; //Основание системы счисления
        string num; //Само число
        bool nvalidation(string n);//Из-за неоднозначности функции имеют 
        bool rvalidation(int r, int min = 2, int max = 36); //различные названия
    public:
        void putRadix(); //Ввод основания
        void putNum(); //Ввод числа
        Notation(); //Конструктор, вызывающий предыдущие две функции
        ~Notation();    
};
 
bool Notation::nvalidation(string n) //Проверяем корректность значения
{
    if (10 > n.length())
    {
        cout << "\nНекорректное значение!";
        return true;
    }
    for (int i = 0; i <= 9; i++)
    {
        if (n.find(i) == string::npos)
        {
            continue;
        }
        else
        {
            cout << "\nНекорректное значение!";
            return true;
        }
    }
    return false;
}
 
bool Notation::rvalidation(int r, int min, int max) //Проверяем корректность значения
{ 
    if (r < min || r > max)
    {
        cout << "\nНекорректное значение!";
        return true;
    }
    else
    {
        return false;
    }
}
 
void Notation::putRadix()
{ 
    float radix1;
    bool waft = false;
    while (waft == true)
    {
        cout << "\nВведите основание: ";
        cin >> radix1;
        waft = rvalidation (radix1);
    }
    this -> radix = radix1;
}
 
void Notation::putNum() 
{
    bool waft = false;
    while (waft == true)
    {
    cout << "\nВведите число: ";
    cin >> this -> num;
    waft = nvalidation (num);
    }
}
 
Notation::Notation()
{
    cout << "\n\nЭта программа осуществляет перевод между различными системами счисления";
    this -> putRadix();
    this -> putNum(); 
}
 
Notation::~Notation()
{
    cout << " ", radix, " ", num;
}
                                       
int main()
{
    setlocale(LC_ALL,"Russian"); //Это чтобы в cmd.exe корректно отображалась кириллица
    Notation test;
}
Сам вопрос: что я делаю не так?

Собственная догадка: что-то не так в коде конструктора.
0
Миниатюры
Что-то не так с классом  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что-то не так с классом (C++):

Переделать программу под класс. Т.е. чтобы она работала так же, но с классом - C++
Дано вещественное число а и натуральное число n. Вычислить : а^1,a^2,a^3,..a^n. Операцию возведения в степень не использовать. ...

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее? - C++
Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ float a,c; char b; skip: ...

Что в коде ни так? while не работает так, как ожидаю - C++
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

Что-то не то с Майкрсофт визуал студио 2010 или я что-то не так делаю - C++
Дело в том что при запуске вот этой программы: #include &lt;iostream&gt; using namespace std; int main () { for (int i=100; i&lt;=999;...

Что в программе делает так, что процессор грузится на 100%? - C++
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Список: Что не так с выводом списка, потому что выводится какой-то мусор? - C++
#include &lt;iostream&gt; using namespace std; struct point { int data;//информационное поле-это даннные объявленного или используемого...

9
David Sylva
1290 / 952 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 18:22 #2
86 строка не правильный вывод на экран
Цитата Сообщение от kernell_dll Посмотреть сообщение
cout << " ", radix, " ", num;
0
kernell_dll
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 9
11.01.2013, 18:23  [ТС] #3
Цитата Сообщение от David Sylva Посмотреть сообщение
86 строка не правильный вывод на экран
Что там неправильного-то?
0
David Sylva
1290 / 952 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 18:28 #4
Цитата Сообщение от kernell_dll Посмотреть сообщение
cout << " ", radix, " ", num;
Может так cout << " " << radix << " " << num;
И вообще зачем вы в деструкторе это делаете?

Добавлено через 1 минуту
Откомпилировал, ваш код, ошибка из за того, что переменная radix не проинициализированна в конструкторе.
0
kernell_dll
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 9
11.01.2013, 18:38  [ТС] #5
Цитата Сообщение от David Sylva Посмотреть сообщение
Может так cout << " " << radix << " " << num;
И вообще зачем вы в деструкторе это делаете?
Странно, что на это не ругнулся компилятор. Насчёт деструктора, хотел посмотреть, когда он вызывается. Судя по книжке, вызывается тогда, когда объект выходит из "зоны видимости" => должен вызваться по завершению программы. Или я в чём-то неправ?
Добавлено через 1 минуту
Откомпилировал, ваш код, ошибка из за того, что переменная radix не проинициализированна в конструкторе
Её инициализация разве обязательно должна происходить в конструкторе? Переменная radix инициализируется в функции putRadix:
C++
1
this -> radix = radix1;
Добавлено через 4 минуты
Ага! Разобрался, почему не происходит ввода. Это всё из-за строчки 68:
C++
1
bool waft = false;
Нужно ставить флаг true, так как цикл while происходит, если wafl == true.

Помимо этого, нашёл ещё кучу логических ошибок. Доволен и счастлив.
0
David Sylva
1290 / 952 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 18:39 #6
Цитата Сообщение от kernell_dll Посмотреть сообщение
Её инициализация разве обязательно должна происходить в конструкторе?
Конструктор для того и нужен, чтобы инициализировать объекты.
Деструкторы вызываются при уничтожении объектов.
Конструкторы при создании.
0
kernell_dll
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 9
11.01.2013, 18:45  [ТС] #7
Цитата Сообщение от David Sylva Посмотреть сообщение
Конструктор для того и нужен, чтобы инициализировать объекты.
Деструкторы вызываются при уничтожении объектов.
Конструкторы при создании.
Однако переменная -- не объект! Тем более, данный конструктор всё-таки инициализирует эту переменную, для этого вызывается соответствующая функция.

Хотите сказать, при завершении программы объекты не разрушаются?
0
StasGamilton
Эксперт по пяченькам
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
11.01.2013, 18:47 #8
Цитата Сообщение от David Sylva Посмотреть сообщение
ошибка из за того, что переменная radix не проинициализированна в конструкторе
Ошибка? а не warning случайно?
0
David Sylva
1290 / 952 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
11.01.2013, 18:54 #9
Цитата Сообщение от StasGamilton Посмотреть сообщение
Ошибка? а не warning случайно?
Ошибка в контексте данной программы.

Добавлено через 2 минуты
Цитата Сообщение от kernell_dll Посмотреть сообщение
Однако переменная -- не объект!
Цитирую Страуструпа страница 304, раздел 10.4
Некоторые объекты являются локальными переменными, некоторые глобальными переменными, другие входят в состав более крупных объектов других классов.
0
kernell_dll
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 9
11.01.2013, 18:59  [ТС] #10
Цитата Сообщение от David Sylva Посмотреть сообщение
Некоторые объекты являются локальными переменными, некоторые глобальными переменными, другие входят в состав более крупных объектов других классов.
Извиняюсь, неправильно сформулировал. В данном случае переменная radix -- не объект.
Обект в функции main():
C++
1
Notation test;
0
11.01.2013, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 18:59
Привет! Вот еще темы с ответами:

Лучший интерактивный самоучитель с++, но так понравился, что думаю, а что если после python изучать с++? - C++
http://academy.cppstudio.com/courses/ 1.) поделитесь опытом после какого языка вы перешли на с++. 2.) Что вам нравится/не очень в языке...

Как сделать так,что бы при введение,например 0;0 выдавалось сообщение,что точка находится на границе? - C++
#include &lt;iostream&gt; using namespace std; int main(){ double x, y; int R=10 cout &lt;&lt; &quot;Введите x: &quot; &lt;&lt;...

Ребят Незнаю что делать при запуске на компилирование выдает ошибку.Кто понимает что не так скажите а если не затруднит исправьте ошибку - C++
Разговаривал с двумя преподами говорят что проект не правильно создавал,хотя все правильно из группы спрашивал у парней говорят что не...

Что не так? - C++
Помогите пожалуйста задание в документе вот код что в нём не так? #include&lt;iostream&gt; #include&lt;math.h&gt; #include&lt;iomanip&gt; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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