Разработка программного обеспечения для Linux. Инструментарий
Давайте снова переделаем нашу программу, но на этот раз уже напишем её на 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