Klasa Czas i przygotowanie dla niej operatorów

0

Mam przygotować na zajęcia takie zadanie:
Stwórz klasę o nazwie Czas posiadającą trzy pola: godzina, minuta i sekunda.
Powinna posiadać ona konstruktor parametrowy i bezparametrowy inicjalizujący wszystkie
pola.
Dodaj do niej metodę wypiszCzas() wypisującą na ekran godzinę, minutę i sekundę.
Przeładuj dwa operatory:

  • operator dodawania "+" tak aby można było dodawać dwa obiekty klasy Czas w oparciu o
    24 godzinny zegar.
  • operator mniejszości "<" tak aby można było porównywać dwa obiekty

Póki co napisałam to:

#include<cstdio>
#include<iosteam>
using namespace std;

class Czas
{
	public:
	int godzina;
	int minuta;
	int sekunda;
	void WypiszCzas();
	Czas ()
	{
		godzina=0;
		minuta=0;
		sekunda=0;
	}
	
	Czas(int godzina2,int minuta2,int sekunda2)	
	{
		godzina2=godzina;
		minuta2=minuta;
		sekunda2=sekunda;
		
	}
	int operator+ ( Czas &q, Czas &w) {
		if(godzina=<24)
	     if(minuta=<60)
	     if(sekunda=<60)
		return () };
	bool operator< ( Czas const &q, Czas const &w) const {return q < w;}
	
	
void Czas::WypiszCzas()
{
	
	cout<<"Godzina "<<godzina << " Minuta " <<minuta<<" Sekunda "<<sekunda<<endl;
}


int main()
{
	
} 

Czy operator mniejszosci jest poprawny? I jak napisać operator dodawania? W necie pełno przykładów, ale nic stricte podobnego. Jestem totalnie początkująca i nie wiem jak to ugryźć. Proszę o pomoc!

0

Video tutorial dla Ciebie:

0

Gratuluję gustu muzycznego, ale nie jest to zbytnio w temacie.

0
bool operator < (const Czas &c)
{
  if (c.godzina < godzina) return false ;
  if (c.minuta < minuta) return false ;
  if (c.sekunda < sekunda) return false ;

  return true ;
}

Czas operator + (const Czas &c)
{
  int sek ;
  int min ;
  int godz ;

  sek = sekunda + c.sekunda ;
  min = minuta + c.minuta ;
  godz = godzina + c.godzina ;

  if (sek > 59)
  {
    sek -= 60 ;
    min += 1 ;
  }
  if (min > 59)
  {
    min -= 60 ;
    godz += 1 ;
  }
  if (godz > 23)
  {
    godz -= 24 ;
  }

  return Czas(godz, min, sek) ;
}

Dodatkowo, masz mały błąd w drugim konstruktorze:

Czas(int godzina2,int minuta2,int sekunda2)    
{
  godzina2=godzina;
  minuta2=minuta;
  sekunda2=sekunda;
}

Zamień miejscami zmienne przy przypisywaniu i będzie git ;).

2

Skoro @Lord Darkstorm nie śpieszy się z poprawieniem bubla to:

#include <iostream>
using namespace std;
 
class Czas
  {
   private:
   unsigned godzina,minuta,sekunda;
   static unsigned value(unsigned g,unsigned m,unsigned s) { return g*3600+m*60+s; }
   unsigned value()const { return value(godzina,minuta,sekunda);  }
   static unsigned mod60(unsigned &v) { unsigned sv=v; v/=60; return sv-v*60; }
   void set(unsigned v) { sekunda=mod60(v); minuta=mod60(v); godzina=v; }
   public:
   Czas(unsigned g=0,unsigned m=0,unsigned s=0) { set(value(g,m,s)); }
   friend Czas operator+(const Czas &a,const Czas &b) { return Czas(0,0,a.value()+b.value()); }
   friend bool operator<(const Czas &a,const Czas &b) { return a.value()<b.value(); }
   friend ostream &operator<<(ostream &s,const Czas &c) { return s<<c.godzina<<':'<<c.minuta<<':'<<c.sekunda; }
   void WypiszCzas() { cout<<*this<<endl; }
  };
 
int main()
  {
   Czas a(23,59,02);
   cout<<a<<endl;
   Czas b(0,0,3);
   cout<<b<<endl;
   cout<<(a<b)<<endl;
   cout<<(b<a)<<endl;
   cout<<(a+b)<<endl;
   return 0;
  }
3

tak bym napisał operator<

to dla @Lord Darkstorm

#include <iostream>
#include <set>
#include <tuple>

struct A
{
	int h;

	int m;

	int s;

	bool operator<(A const& other) const {
		return std::tie(h, m, s) < std::tie(other.h, other.m, other.s);
	}
};

int main()
{
	std::set<A> s { { 14, 32, 9 }, { 0, 40, 2 }, { 3, 58, 59 }, { 3, 58, 1 } };
	for(auto const& a : s)
		std::cout << a.h << "::" << a.m << "::" << a.s << std::endl;

	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1