Hej,
Jestem w trakcie kursu C/C++ na studiach i spotykam się ze sporymi nowościami mimo że myślałem że rozumiem czyste początki,
więc mam do was kilka pytań, na samym dole zamieszczę kod.
Pytania:
- Nie rozumiem sposobu działania enum w tym programie, przecież enum istnieje tylko i wyłącznie w pliku nagłówkowym, więc powinien służyć jedynie jako prototyp/deklaracja, nie jestem w stanie zrozumieć jak ma to działać dokładniej, bo przecież w wypadku funkcji deklarujemy jedynie ją w pliku nagłówkowym, a cała funkcja jest rozpisana w odpowiednim pliku z rozszerzeniem .cpp. Jeśli przy okazji ktoś chciałby mi wytłumaczyć czemu dodajemy typ usigned int do tego enum też byłoby miło.
- W jakim celu podpinamy/załączamy: #include "calculator.h" do pliku calculator.cpp, ja tworzyłem prostsze przykłady, to nie robiłem tego i działało, to się nie załącza automatycznie przez trywialnie mówiąc tą samą nazwę?
- Ostatnie moje pytanie załącza się z brakiem zrozumienia static_cast, nie rozumiem jak do końca to działa.
W wielkim skrócie zrobiłem program na szablonie przygotowanym przez wykładowcę, a nie rozumiem części szablonu i dlatego przychodzę z pytaniami, koncept do zajęć jest niestety tragicznie napisany.
Z góry wielkie dzięki za każdą pomoc (;
//Plik main.cpp
#include <iostream>
#include "calculator.h"
int main() {
float x, y, result;
std::cout << "Type two numbers." << std::endl << "x: ";
std::cin >> x;
std::cout << std::endl << "y: ";
std::cin >> y;
std::cout << std::endl << "Choose arithmetic operation to be performed:" << std::endl
<< "0 - addition" << std::endl
<< "1 - subtraction" << std::endl
<< "2 - multiplication" << std::endl
<< "3 - division" << std::endl;
unsigned int operationValue;
std::cin >> operationValue;
Operation operation = static_cast<Operation>(operationValue);
result = calculate(operation, x, y);
std::cout << "Operation result equals: " << result << std::endl;
return EXIT_SUCCESS;
}
//Plik calculator.h
#pragma once
#include <limits>
enum class Operation : unsigned int {
ADD = 0,
SUBTRACT = 1,
MULTIPLY = 2,
DIVIDE = 3,
INVALID = std::numeric_limits<unsigned int>::max()
};
float add(float x, float y);
float subtract(float x, float y);
float multiply(float x, float y);
float divide(float x, float y);
float calculate(Operation operation, float x, float y);
//Plik calculator.cpp
#include <iostream>
#include "calculator.h"
namespace {
void quitWithError() {
std::cout << "Invalid operation performed" << std::endl;
exit(EXIT_FAILURE);
}
} // anonymous namespace
float add(float x, float y){
return x+y;
}
float substract(float x, float y){
return x-y;
}
float multiply(float x, float y){
return x*y;
}
float divide(float x, float y){
if(y==0)
{
quitWithError();
}
return x/y;
}
float calculate(Operation operation, float x, float y){
switch(operation){
case Operation::ADD:
return add(x, y);
break;
case Operation::SUBTRACT:
return substract(x, y);
break;
case Operation::MULTIPLY:
return multiply(x ,y);
break;
case Operation::DIVIDE:
return divide(x, y);
break;
}
}