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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Матрицы. Бесконечный цикл. Проверка ввода http://www.cyberforum.ru/cpp-beginners/thread631324.html
В конструкторе класса матриц пользователю предлагается выбрать ввода с клавиатуры или автоматически. При выборе ручного ввода возникает цикл непонятного характера. Вот фото консоли во вложении. Вот конструктор: Matrix::Matrix(int s, char type){ int i,j; char ch;
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; n,i:integer;
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++? Типа такого: try{ ... } catch ( std::exception &e ){ std::err << e.what() << std::endl; } При этом, чтобы в зависимости от типа исключения возвращался разный текст из e.what() Мне самое...
C++ Понижение регистра в строке Всем привет! Не могу понизить регистр в строке. Использовал функции towupper, towlower, не помогло. Мне это нужно для сравнения строк. Пошел другим путем использовал _tcsicmp, _wcsicmp, чтобы сравнить две строки без регистра, тоже не работает. wstring namestreet; for ( size_t i = 0; i < namestreet.length(); ++i ) { if (i == 0) namestreet = toupper(namestreet); подробнее

Показать сообщение отдельно
Tochka
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
31.07.2012, 20:50     Проверка на корректность операции
Добрый день.

Не знаю как лучше задать вопрос.
Смысл идеи таков:
Есть интерфейс типа данных (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.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru