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

Проверка на корректность операции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Матрицы. Бесконечный цикл. Проверка ввода http://www.cyberforum.ru/cpp-beginners/thread631324.html
В конструкторе класса матриц пользователю предлагается выбрать ввода с клавиатуры или автоматически. При выборе ручного ввода возникает цикл непонятного характера. Вот фото консоли во вложении. ...
C++ Ссылка на ссылку Можно ли говорить, что t это ссылка на ссылку? int y=2; int &q=y; int& t = q; http://www.cyberforum.ru/cpp-beginners/thread631318.html
Программы pascal переписать под c++ C++
Всем доброго времени суток помогите переписать программы под c++ Условие Дано натуральное число n, и действительное число x. Вычислить. program laba3_2; uses crt; var x,s:real;...
C++ Строки, в чём ошибка?
так не работает int main(){ char *str = "ASDc"; str = tolower(str); cout << str; return 0; }
C++ Как свиртуализировать исключения? http://www.cyberforum.ru/cpp-beginners/thread631292.html
Мне очень нравится как реализован перехват исключений в Python и Java: там в блоке catch не надо перечислять все виды исключений, а достаточно типы exception предков. Можно ли так же делать в C++?...
C++ Понижение регистра в строке Всем привет! Не могу понизить регистр в строке. Использовал функции towupper, towlower, не помогло. Мне это нужно для сравнения строк. Пошел другим путем использовал _tcsicmp, _wcsicmp, чтобы... подробнее

Показать сообщение отдельно
Tochka
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6

Проверка на корректность операции - C++

31.07.2012, 20:50. Просмотров 457. Ответов 7
Метки (Все метки)

Добрый день.

Не знаю как лучше задать вопрос.
Смысл идеи таков:
Есть интерфейс типа данных (IVariable) и наследники от него, например: Number, Complex, Matrix.
Необходимо реализовать функцию сложения Sum(IVariable a, IVariable b), так чтобы можно было определить возможность сложения и вернуть значение IVariable суммы чисел.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include "Math"
 
using namespace std;
 
int main (int argc, char ** args)
{
   Number a (5);
   Complex b (4,2);
   Matrix c (2,2);
   
   cout << a<<"+"<<b<<"="<<sum(a,b)<<endl;
   cout <<b<<"+"<<c<<"="<<sum(b,c)<<endl;
   return 1;
}
Результат:
Bash
1
2
5+4+2i=9+2i
4+2i+{2,2}=нельзя складывать эти типы.
На ум приходит только метод у интерфейса OperationCorrect(int /*Тип операции */, int /* Тип переменной */)
Тогда операцию сложения можно написать так:
C++
1
2
3
4
5
6
7
8
9
const int SUM=1;
IVariable sum(IVariable a, IVariable b)
{
 if(a.OperationCorrect(SUM,b.type)
     return a+b;
 if(b.OperationCorrect(SUM,a.type)
     return b+a;
 return new IErrorSum();
}
Может кто знает более интересней вариант.

P.S. Тип Number ничего не знает про тип Complex и Matrix,
тип Complex и Matrix знают про тип Number.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru