G++

Давайте снова переделаем нашу программу, но на этот раз уже напишем её на C++. Создайте новый каталог проекта kalkulcpp, а в нём три файла: problem.h, problem.cpp, main.cpp.

problem.h

#ifndef PROBLEM_H_

#define PROBLEM_H_

#include <string>

using namespace std;

class CProblem

{

private:

float Numeral;

float SecondNumeral;

string Operation;

float Result;

string Error;

bool Calculate();

public:

void SetValues();

void Solve();

};

#endif /*PROBLEM_H_*/

problem.cpp

#include <iostream>

#include <cmath>

#include "problem.h"

using namespace std;

void CProblem::SetValues()

{

cout << "Число: ";

cin >> Numeral;

cout << "Арифметическое действие (+,-,*,/,pow,sqrt,sin,cos,tan): ";

cin >> Operation;

}

bool CProblem::Calculate()

{

if(Operation == "+")

{

cout << "Второе слагаемое: ";

cin >> SecondNumeral;

Result = Numeral + SecondNumeral;

return true;

}

else if(Operation == "-")

{

cout << "Второе слагаемое: ";

cin >> SecondNumeral;

Result = Numeral - SecondNumeral;

return true;

}

else if(Operation == "*")

{

cout << "Множитель: ";

cin >> SecondNumeral;

Result = Numeral * SecondNumeral;

return true;

}

else if(Operation == "/")

{

cout << "Делитель: ";

cin >> SecondNumeral;

if(SecondNumeral == 0)

{

Error = "Ошибка: деление на ноль.";

return false;

}

else

{

Result = Numeral/SecondNumeral;

return true;

}

}

else if(Operation == "pow")

{

cout << "Степень: ";

cin >> SecondNumeral;

Result = pow(Numeral,SecondNumeral);

return true;

}

else if(Operation == "sqrt")

{

Result = sqrt(Numeral);

return true;

}

else if(Operation == "sin")

{

Result = sin(Numeral);

return true;

}

else if(Operation == "cos")

{

Result = cos(Numeral);

return true;

}

else if(Operation == "tan")

{

Result = tan(Numeral);

return true;

}

else

{

Error = "Ошибка ввода действия.";

return false;

}

}

void CProblem::Solve()

{

if(Calculate() == true)

cout << Result << "\n";

else

cout << Error << "\n";

}

main.cpp

#include <iostream>

#include "problem.h"

using namespace std;

int main(void)

{

CProblem *Problem;

Problem = new CProblem;

Problem->SetValues();

Problem->Solve();

delete Problem;

return(0);

}

Для сборки программ на C++ в наборе GNU имеется другой компилятор – G++. Он отличается от GCC тем, что по умолчанию подключает не стандартную библиотеку C, а стандартную библиотеку C++. Все флаги и опции у G++ такие же точно, как и у GCC. Воспользуемся компилятором G++.

g++ problem.cpp main.cpp -o kalkul

Обратите внимание, что никаких дополнительных библиотек мы не подключали. Это означает, что математические функции входят в стандартную библиотеку C++. Вообще, в тех случаях, когда программа пишется на C++, рекомендуется использовать именно G++.

Вы уже знаете, что собирать программы таким простым способом можно только в учебных целях. В профессиональной же работе ваши проекты будут включать большое количество файлов, и вам придётся пользоваться утилитой make. Создадим Makefile.

kalkul: problem.o main.o

g++ problem.o main.o -o kalkul

problem.o: problem.cpp problem.h

g++ -c problem.cpp

main.o: main.cpp problem.h

g++ -c main.cpp

clean:

rm -f kalkul problem.o main.o

install:

cp kalkul /usr/local/bin/kalkul

uninstall:

rm -f /usr/local/bin/kalkul

И соберём эту же программу снова, но уже «правильным» способом.

make

«Инсталлируем» её, предварительно зайдя в систему, как суперпользователь.

su

make install

exit

«Деинсталлируем».

su

make uninstall

exit

И очистим дистрибутив.

make clean