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

Класс возведения в степень - C++

Восстановить пароль Регистрация
 
Jman
 Аватар для Jman
27 / 27 / 3
Регистрация: 11.10.2015
Сообщений: 272
Завершенные тесты: 1
27.09.2016, 16:15     Класс возведения в степень #1
Добрый день всем. Тут зашел в тупик. Класс с функцией-членом возведения числа в степень путем перемножения друг на друга (я хочу добавить и вещественные числа). Хотелось бы организовать все одной функцией - членом, в голову пришли шаблоны, хочется не использовать перегрузки и введения двух переменных... А вот как с типом данных быть? Тут подумал о void* , а вот как сделать правильно тямы не хватает. Есть что-то на подобии var в С#?

класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Power
{
        void* _value;
public:
        template <typename T>
        Power(T value)
        {
            _value = value;
        }
 
        template<typename T>
        T PowerCalculation(T _value)
        {
            return _value * _value;  // тут ругается;
        }
        
};
Майн
C++
1
2
3
4
5
void* inputValue;
            cout << "Введите число которое необходимо возвести в квадрат" << endl;
            cin >> inputValue;
            Power MyPower(inputValue);
            cout << "Число в степени 2 равно: " << MyPower.PowerCalculation(inputValue);
Добавлено через 5 минут
Подменил void* на float работает и с целым типом и с вещественным. Вот не знаю, так правильно будет?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
27.09.2016, 16:25     Класс возведения в степень #2
Jman, операция умножения для типа указателя не определена. Что Вас так смутило?
Jman
 Аватар для Jman
27 / 27 / 3
Регистрация: 11.10.2015
Сообщений: 272
Завершенные тесты: 1
27.09.2016, 16:26  [ТС]     Класс возведения в степень #3
Цитата Сообщение от ture Посмотреть сообщение
Что Вас так смутило?
У меня не компилирует вообще... Ошибка.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
27.09.2016, 16:33     Класс возведения в степень #4
C++
1
2
3
4
5
template<typename T>
        T PowerCalculation(T _value)
        {
            return _value * _value;  // тут ругается;
        }
Такое определение скрывает член-данных класса:
C++
1
void* _value;
Когда ставите числовой тип, то функция работает. Но она не использует член-данных класса.
Jman
 Аватар для Jman
27 / 27 / 3
Регистрация: 11.10.2015
Сообщений: 272
Завершенные тесты: 1
27.09.2016, 16:37  [ТС]     Класс возведения в степень #5
Цитата Сообщение от ture Посмотреть сообщение
Но она не использует член-данных класса.
Как побороть?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,231
27.09.2016, 16:41     Класс возведения в степень #6
Цитата Сообщение от Jman Посмотреть сообщение
void* inputValue;
* * * * * * cout << "Введите число которое необходимо возвести в квадрат" << endl;
* * * * * * cin >> inputValue;
вы хотите, чтобы вам ввели адрес? Я к примеру не знаю адрес - как мне работать с вашей программой?
Jman
 Аватар для Jman
27 / 27 / 3
Регистрация: 11.10.2015
Сообщений: 272
Завершенные тесты: 1
27.09.2016, 16:43  [ТС]     Класс возведения в степень #7
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
вы хотите, чтобы вам ввели адрес? Я к примеру не знаю адрес - как мне работать с вашей программой?
Для вас я написал так =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Power
{
        float _value;
public:
        template <typename T>
        Power(T value)
        {
            _value = value;
        }
 
        template<typename T>
        T PowerCalculation(T _value)
        {
            return _value * _value;
        }
};
C++
1
2
3
4
5
6
7
8
9
case 4: 
        {
            float inputValue;
            cout << "Введите число которое необходимо возвести в квадрат" << endl;
            cin >> inputValue;
            Power MyPower(inputValue);
            cout << "Число в степени 2 равно: " << MyPower.PowerCalculation(inputValue) << endl;
        }
        break;
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
27.09.2016, 16:45     Класс возведения в степень #8
Jman,
Значит вместо var, здесь auto.
Но в обоих случаях тип вычисляет компилятор на этапе компиляции. Т.е. вызвать одновременно для целого и вещественного типа нельзя. Вы верно подметили для этой цели шаблоны и осилили шаблонную функцию (по одному экземпляру такой функции автоматически сформируется для каждого типа, где это не противоречит операциям).

Может Вам нужен шаблон класса целиком?
Jman
 Аватар для Jman
27 / 27 / 3
Регистрация: 11.10.2015
Сообщений: 272
Завершенные тесты: 1
27.09.2016, 16:49  [ТС]     Класс возведения в степень #9
Цитата Сообщение от ture Посмотреть сообщение
Может Вам нужен шаблон класса целиком?
Да! =) Про auto забыл... Вернее вроде как auto в Си это совсем другое по памяти. А в С++11 аналог var.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2016, 16:55     Класс возведения в степень
Еще ссылки по теме:

C++ Функция возведения в степень.
Перегрузить функцию возведения в степень C++
Рекурсивная функция возведения в степень C++

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

Или воспользуйтесь поиском по форуму:
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
27.09.2016, 16:55     Класс возведения в степень #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename T>class Power {
private:
    T value;
public:
    Power(T value):value(value){}
 
    
    T PowerCalculation() {
        return value * value;  
    }
 
};
 
 
int main() {
    Power<int> a(2);
    int res1 = a.PowerCalculation();
 
    Power<double> b(2.1);
    double res2 = b.PowerCalculation();
 
    return 0;
}
Вернее вроде как auto в Си это совсем другое. А в С++11 вроде другое.
Это Вы под линух не писали еще. Вот там актуальный вопрос - "А что такое с++?"
Yandex
Объявления
27.09.2016, 16:55     Класс возведения в степень
Ответ Создать тему
Опции темы

Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru