Witam. Napisałem pierwszy program w C++ i chciałbym zapytać się czy jest w miarę ok, mam też kilka pytań, mianowicie do pętli while wczytującej dane do switcha, czy jest zrobiona poprawnie oraz do metod w klasie, jak odrzucać najlepiej błędne dane ( typu litery zamiast cyfer). W C używałem do tego zawsze pętli do while i wartości zwracanej ze scanfu, tutaj podobno stosuje się cin.getline i obiekt zwracany, ale widziałem kilka opcji i mam mały mętlik w głowie.
Jedno pytanie też dotyczy konstruktora, czy w ten sposób domyślny może być używany, bo Prata w swojej książce poleca robienie osobno domyślnego i osobno innego, nawet jeśli tylko jedna kategoria jest niedomyślna. Z góry dzięki za pomoc.
Zapodaję pliki, podzieliłem zgodnie z zaleceniami program na 3 części:
wynik_dzialania.h
#ifndef WYNIK_DZIALANIA_H_
#define WYNIK_DZIALANIA_H_
class Wynik_dzialania
{
private:
double first;
double second;
double result;
public:
Wynik_dzialania(double a = 1, double b = 1, double wynik = 1);
~Wynik_dzialania();
void dodawanie();
void odejmowanie();
void mnozenie();
void dzielenie();
};
#endif
wynik_dzialania.cpp
#include <iostream>
#include "wynik_dzialania.h"
Wynik_dzialania::Wynik_dzialania(double a, double b, double wynik)
{
first = a;
second = b;
result = wynik;
}
Wynik_dzialania::~Wynik_dzialania()
{
}
void Wynik_dzialania::dodawanie()
{
using namespace std;
cout << "Wybrales dodawanie!"<<endl<<"Wprowadz prosze liczbe pierwsza:";
cin >> first;
cout << "Wprowadz prosze liczbe druga"<<endl;
cin >> second;
result = first + second;
cout << "Wynik to:" << result << endl;
}
void Wynik_dzialania::odejmowanie()
{
using namespace std;
cout << "Wybrales odejmowanie!"<<endl<<"Wprowadz prosze liczbe pierwsza:";
cin >> first;
cout << "Wprowadz prosze liczbe druga"<<endl;
cin >> second;
result = first - second;
cout << "Wynik to:" << result << endl;
}
void Wynik_dzialania::mnozenie()
{
using namespace std;
cout << "Wybrales mnozenie!"<<endl<<"Wprowadz prosze liczbe pierwsza:";
cin >> first;
cout << "Wprowadz prosze liczbe druga"<<endl;
cin >> second;
result = first * second;
cout << "Wynik to:" << result << endl;
}
void Wynik_dzialania::dzielenie()
{
using namespace std;
cout << "Wybrales dzielenie!"<<endl<<"Wprowadz prosze liczbe pierwsza:";
cin >> first;
do
{
cout << "Wprowadz prosze liczbe druga rozna od zera"<<endl;
cin >> second;
}
while(second==0);
result = first / second;
cout << "Wynik to:" << result << endl;
}
main.cpp
#include <iostream>
#include <cstdlib>
#include "wynik_dzialania.h"
int main()
{
using namespace std;
char ch = '1'; // zeby losowo nie przydzielilo sie zero
Wynik_dzialania cos;
while(ch != '0' )
{
cout << "Kalkulator obiektowy\n";
cout << " MENU \n";
cout << "1.dodawanie\n";
cout << "2.odejmowanie\n";
cout << "3.mnozenie\n";
cout << "4.dzielenie\n";
cout << "0. Wyjscie z programu\n";
cin >> ch;
switch(ch)
{
case '1': cos.dodawanie();
break;
case '2': cos.odejmowanie();
break;
case '3': cos.mnozenie();
break;
case '4': cos.dzielenie();
break;
default: cout << "brak takiej opcji!\n";
}
cin.clear(); // czyszczenie bufora, to samo co fflush(stdin) w C ?
}
cout << " Do widzenia!\n";
return 0;
}
Każdą uwagę przyjmę z miłą chęcią.