Калькулятор функционален, однако я хотел иметь возможность писать хороший код, а не просто функциональный код.
Мне интересно, есть ли способ изменить класс вычислений, чтобы добавление новых типов операций, таких как: pow(), sqrt, log, sin и т. д., было бы более простым и удобным, в основном оператор переключения в Класс расчета.
Вот код для всех трех классов:
Код: Выделить всё
#pragma once
#include "AdvancedCalculation.h"
class UserInterface {
private:
AdvancedCalculation C;
protected:
double num1;
double num2;
string op;
double result;
char input;
public:
void baseProgram() {
using namespace std;
do {
cout num1;
C.setNum1(num1);
cout op;
C.setOp(op);
cout num2;
C.setNum2(num2);
C.logic();
cout num1 = num1;
}
void setNum2(double num2) {
this->num2 = num2;
}
void setOp(string op) {
transform(op.begin(), op.end(), op.begin(), ::tolower);
this->op = op;
}
double getResult() {
return result;
}
protected:
double num1;
double num2;
string op;
double result;
vector listOfOperators = {
{
{"+", "plus", "add"},
{"-", "minus"},
{"*", "multiply", "multiply by", "multiplied by"},
{"/", "divide"},
{"^", "power", "power to"},
{"s", "squareroot", "square root", "square root of"}
}
};
void Addition() {
result = num1 + num2;
}
void Subtraction() {
result = num1 - num2;
}
void Multiplication() {
result = num1 * num2;
}
void Division() {
result = num1 / num2;
}
void simplifiyOp() {
for (auto operatorType : listOfOperators) {
for (string wording : operatorType) {
if (op == wording) {
op = operatorType[0];
break;
}
}
}
}
private:
void BaseCalculator() {
switch (op[0]) {
case '+':
Addition();
break;
case '-':
Subtraction();
break;
case '*':
Multiplication();
break;
case '/':
Division();
break;
default:
break;
}
}
};
#pragma once
#include "Calculation.h"
class AdvancedCalculation : public Calculation
{
public:
void logic() {
simplifiyOp();
BaseCalculator();
}
protected:
void Powers() {
result = pow(num1, num2);
}
void Square() {
result = pow(num1, 1 / num2);
}
void BaseCalculator() {
switch (op[0]) {
case '+':
Addition();
break;
case '-':
Subtraction();
break;
case '*':
Multiplication();
break;
case '/':
Division();
break;
case '^':
Powers();
break;
case 's':
Square();
break;
default:
break;
}
}
};
Подробнее здесь: https://stackoverflow.com/questions/793 ... or-program