Как вынести функции в класс

176
14 апреля 2019, 08:00
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <fstream>
#include <windows.h>
#include <math.h>
// Все ограничение вынес в define что бы проще было регулировать.
#define  ALPHA_RESTRICTION_START  0
#define  E_RESTRICTION_START 1E-9
#define  V_RESTRICTION_START 1000
#define  B_RESTRICTION_START 0.01
#define  ALPHA_RESTRICTION_END M_PI/2
#define  E_RESTRICTION_END 3E-9
#define  V_RESTRICTION_END 2000
#define  B_RESTRICTION_END 0.025
using namespace std;

class ComputeObject{
protected:
    double F;
    virtual void input()=0;
    virtual void output()=0;
    virtual void parameterCalculation()=0;

};

class Charge:public ComputeObject{
    double temp,temp1,temp2,temp3; // временные переменные
    bool flag;
    bool flag1;
    bool flag2;
    bool flag3;
    bool flag4;
protected:
 double e,V,B,alpha;
    void rangeCheck(double alpha, double e, double V, double B){
        // проверка на ввод , если хоть  1 данное ведено не верно выводиться сообщение об ошибке ,
        // и поле которое не правильно введено.Если всё верно данные с
        // временной переменной
        // переносятся в нужные
        flag = false;   // устанавливаем все флаги как false
        flag1 = false;
        flag2 = false;
        flag3 = false;
        flag4 = false;
        if (alpha>= ALPHA_RESTRICTION_START && alpha <= ALPHA_RESTRICTION_END) {
            this->alpha= alpha;
        } else {
            flag = true;
            flag1 = true;
        }
        if (e>= E_RESTRICTION_START && e<= E_RESTRICTION_END) {
            this->e = e;
        } else {
            flag = true;
            flag2 = true;
        }
        if (V >= V_RESTRICTION_START && V <= V_RESTRICTION_END) {
            this->V = V;
        } else {
            flag = true;
            flag3 = true;
        }

        if (B >= B_RESTRICTION_START && B<= B_RESTRICTION_END) {
            this->B = B;
        } else {
            flag = true;
            flag4 = true;
        }
        if (flag) {
            errorMessege();
            exit(1); // что бы после ошибки программа завершалась
        }
    }
    void errorMessege() {
        cout << "Ошибка! Данные не соответсвуют заданым диапазонам:" << endl;
        if (flag1) {
            cout << "\tПоле \"alpha\" Введено не верно.Введите данные в диапазоне от " << ALPHA_RESTRICTION_START << " до "  << ALPHA_RESTRICTION_END << endl;
        }
        if (flag2) {
            cout << "\tПоле \"e\" Введено не верно.Введите данные в диапазоне от  "<< E_RESTRICTION_START <<" до " << E_RESTRICTION_END << endl;
        }
        if (flag3) {
            cout << "\tПоле \"V\" Введено не верно.Введите данные в диапазоне от  "<< V_RESTRICTION_START << " до " << V_RESTRICTION_END << endl;
        }
        if (flag4) {
            cout << "\tПоле \"B\" Введено не верно.Введите данные в диапазоне от  "<< B_RESTRICTION_START <<" до " << B_RESTRICTION_END << endl;
        }
    };
public:

    void output()override{
        ofstream fout("./../result.txt",ios_base::app);
        if (!fout.is_open()) {
            cout << "Файл не может быть открыт для записи!\n";
            exit(1); // если файл не открился закрываем программу.
        }else{
       /* fout.setf(ios_base::fixed);   Эксопненциальную в обычную форму
        fout.precision(10);*/
        fout << "Начальные данные: "<<endl;
        fout << "Alpha = " <<alpha <<endl;
        fout << "e = " << e <<endl;
        fout << "V = " << V <<endl;
        fout << "B = " << B <<endl;
        fout << "Результат: " << endl;
        fout  << "F = " << F << endl;
        fout << "----------------------------------------------------------------------------------------------"<<endl;
        fout.close();
        }
    }
    void parameterCalculation()override{
        F= alpha*e*V*B;
    }
    void input ()override{
        ifstream fin(R"(C:\Users\User\CLionProjects\Kursach_Max_Krugvovykh\hello.txt)",ios_base::in);
        if (!fin.is_open()) {
            cout << "Файл не может быть открыт!\n";
            exit(1); // если файл не открылся закрываем программу.
        } else{
            fin >> temp;
            fin >> temp1;
            fin >> temp2;
            fin >> temp3;
            rangeCheck(temp, temp1, temp2, temp3);
        }
    }
    Charge(double e, double V, double B, double alpha);
    Charge() {};
    Charge(const Charge &other){ // конструктор копирования
        this->e = other.e;
        this->B = other.B;
        this->V = other.V;
        this->alpha = other.alpha;
    }

};
Charge::Charge(double alpha, double e, double V, double B) {
    rangeCheck(alpha, e, V, B);
    };
int main() {

    cin.get();

    return 0;
}

Помогите вынести функции rangeCheck() и errorMessege() в отдельный класс MyError что бы не нарушить функционал, ибо я уже всё что мне известно перепробовал:(

READ ALSO
Плагин для работы с полилиниями

Плагин для работы с полилиниями

Здрасьте! Пишу плагин для создания простой полилинииКогда я жму кнопку "Создать", создается полилиния по заранее введенным координатам

152
Метод пересечения строк

Метод пересечения строк

Более развернуто вопрос звучит так: Написать метод пересечения строк, результат должен содержать только те символы которые есть и в первой...

154
Счастливый билетик Задача C++

Счастливый билетик Задача C++

Всем привет, решал задачу, и написал работающее решениеОдна проблема - по всем тестам не проходит по времени

142
Как написать функцию, чтобы можно было писать qDebug() &lt;&lt; &ldquo;hello&rdquo;;

Как написать функцию, чтобы можно было писать qDebug() << “hello”;

Я не пойму как можно определить функцию, чтобы можно было писать такое:

172