Przeciążanie operatorów - krótki program

0

Cześć, proszę o pomoc w zrozumieniu tworzenia kodu, który jest zaznaczony komentarzami. Jest to program z zaliczenia z języka c++ niestety nie został on sprecyzowany przez prowadzącego i nie bardzo wiem co ma on robić:) Poniżej dane jakie otrzymałem a pod tym mój kod programu :) z góry dzięki za pomoc.

Podane przez prowadzącego:

class Bilet
{
private:
	char* skad;
	char* dokad;
	Data kiedy;
public:
do zrobienia:	
konstruktor, konstruktor kopiujący, operatory przeciążenia: =,==,>>,<<
};

class Data
{
private:
	int dzien;
	int miesiac;
	int rok;
public:
do zrobienia:
	konstruktor
};

Mój kod programu :


#include <stdlib.h>
#include <iostream>

using namespace std;

class Bilet
{
private:
	char* skad;
	char* dokad;
	Data kiedy;
public:
	Bilet(const char* s, const char* d,const Data kk);
	Bilet(const Bilet &k);
	Bilet & operator=(const Bilet &k);
	friend bool & operator==(const Bilet &k1, const Bilet &k2);
	friend istream & operator>>(istream &is, Bilet &k);
	friend ostream & operator<<(ostream &os, const Bilet &k);
};

class Data
{
private:
	int dzien;
	int miesiac;
	int rok;
public:
	Data(int d, int m, int r);
};

Wywolanie wszystkiego

#include "deklaracja.h"


Bilet::Bilet(const char* s, const char* d,const Data kk) :Data(int d, int m, int r);// tu trzeba użyć dziedziczenia przy czym nie wiem jak przypisać pod jedną zmienna 3 wartości
	int dlugosc=strlen(s);
	skad=new char[dlugosc+1];
	strcpy(skad,s);
	dlugosc=strlen(d);
	dokad=new char[dlugosc+1];
	strcpy(dokad,d);
	//tworzenie Daty??
}

Bilet::Bilet(const Bilet &k)
{
	int dlugosc=strlen(k.skad);
	skad=new char[dlugosc+1];
	strcpy(skad,k.skad);
	dlugosc=strlen(k.dokad);
	dokad=new char[dlugosc+1];
	strcpy(dokad,k.dokad);
	//kopiowanie Daty??
}

Bilet & Bilet::operator=(const Bilet &k)
{
if(this ==&k)
	return *this;
delete [] skad;
delete [] dokad;
int dlugosc=strlen(k.skad);
skad=new char[dlugosc+1];
strcpy(skad,k.skad);
dlugosc=strlen(k.dokad);
dokad=new char[dlugosc+1];
strcpy(dokad,k.dokad);
//dalej problem z datą :(
}

bool & operator==(const Bilet &k1, const Bilet &k2);
{
	//tu nie wiem co porownac mam ale sprobuje 
	return (strcpm(k1.skad,k2.dokad));
}
}


ostream & operator<<(ostream &os, const Bilet &k);
{
	os<<"Skad: "<<k.skad<<"\t Dokad :"<<k.dokad<<endl;
	return os;
}


istream & operator>>(istream &is, Bilet &k)
{
	is>>k.skad>>k.dokad;
	return is;
}

Data::Data(int d, int m, int r)
{
	dzien=d;
	miesiac=m;
	rok=r;
}
0
char *StrDup(const char *str)
  {
   size_t size=strlen(str)+1;
   char *tmp=new char[size];
   memcpy(tmp,str,size);
   return tmp;
  }

Bilet::Bilet(const char *skad, const char *dokad,const Data &kiedy):skad(StrDup(skad)),dokad(StrDup(dokad)),kiedy(kiedy)
  {
  }

Zauważ że ta funkcja StrDup będzie u ciebie wszędzie przydatna.

0

Okej to przekształcę ten program ale takie pytanko :) czy taka deklaracja obiektów składowych nie jest nie jest niebezpieczna ? visual mi to skompiluje ale prowadzący się za to czepia a ja nie wiem jak to mogę zastąpić. Prosiłbym o pomoc w deklaracji obiektu kiedy :)

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