Форум программистов, компьютерный форум CyberForum.ru

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

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

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

11.01.2013, 18:18. Просмотров 246. Ответов 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;
}
Сам вопрос: что я делаю не так?

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

что не так - C++
написал код там ошибка)) но а смысл правильный)) помогите плиз что не так)) вот задача Даны целые числа k, m, действительные числа...

Что не так? - C++
// laba1_cpp.cpp : Defines the entry point for the console application. // //не удается составить аргумент шаблон для &quot;T&quot; #include...

Что не так?) - C++
// Программа выполняет следущее: // 1. Считае среднее арифметическое всех положительных элементов массива; // 2. Считает сумму...

Что не так? - C++
Решаю олимпиадные задачи по-тихоньку. Щас встрял на второй задаче... #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt;...

Что не так? - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;locale&gt; #include &lt;conio.h&gt; using namespace std; void main() { ...

что не так? - C++
Дано вещественное число А&gt;0. Найти среди чисел 1, 1+1/2, 1+1/2+1/3... первое же число, большее A. #include&lt;stdio.h&gt; ...

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

Добавлено через 1 минуту
Откомпилировал, ваш код, ошибка из за того, что переменная radix не проинициализированна в конструкторе.
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.

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

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

Добавлено через 2 минуты
Цитата Сообщение от kernell_dll Посмотреть сообщение
Однако переменная -- не объект!
Цитирую Страуструпа страница 304, раздел 10.4
Некоторые объекты являются локальными переменными, некоторые глобальными переменными, другие входят в состав более крупных объектов других классов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 18:59     Что-то не так с классом
Еще ссылки по теме:

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

что не так? - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; class students { int i,kil,j; char...

что не так? - C++
/*задано масcив цеых чисел,создать новый массив который состоит с елементов первого массива и встречаеться всего один раз . получить...

Что не так? - C++
#include &lt;iostream &gt; #include &lt;time.h&gt; using namespace std; void main() { srand(time(0)); int const row = 9 , col = 8 ; ...


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

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

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