online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include <iostream> #include <string> #include <fstream> //#include <algorithm> #include <unordered_set> #include "osoba.h" #include "bazadanych.h" int Osoba::counter=0; int BazaDanych::counter=0; int main() { Osoba o1; cout << "---- 1 ----" << endl; cout << o1 << endl; Osoba o2("Jan", "Kowalski", 11111111111); cout << "---- 2 ----" << endl; cout << o2 << endl; cout << "---- 3 ----" << endl; cout << boolalpha << (o1 == o2) << endl; BazaDanych db1(0); cout << "---- 4 ----" << endl; cout << db1; db1 = db1 + o2; cout << "---- 5 ----" << endl; cout << db1; ifstream plik_we("zadanie7.txt"); if (!plik_we) { cout << "---- 6 ----" << endl; } else { while (plik_we >> o2) { db1 = db1 + o2; } plik_we.close(); } cout << "---- 7 ----" << endl; cout << db1; { BazaDanych db2(db1); cout << "---- 8 ----" << endl; cout << db2; } cout << "---- 9 ----" << endl; cout << db1; BazaDanych db3; db3 = db1 + db1; cout << "---- 10 ----" << endl; cout << db3; std::cout<<"\nbaza bezpowtorek\n"<<std::endl; // https://stackoverflow.com/questions/38554083/how-can-i-use-a-c-unordered-set-for-a-custom-class auto hash = [](const Osoba& o){ return std::hash<std::string>()(o.getimie()); }; auto equal = [](const Osoba& o1, const Osoba& o2){ return o1 == o2;}; std::unordered_set<Osoba, decltype(hash),decltype(equal)> unset(100, hash, equal); unset.insert(db3.beg(),db3.end()); for(const auto & x:unset) cout<<x; cout<<endl; /* for(int i=0; i<db3.liczbaOsob(); ++i) { cout << db3[i] << endl; } /* cout << "---- 11 ----" << endl; db1 = db1 - o1; cout << "---- 12 ----" << endl; cout << db1; cout << "---- 13 ----" << endl; cout << db3; cout << "---- 14 ----" << endl; */ ; return 0; }
#ifndef OSOBA_H_ #define OSOBA_H_ #include <iomanip> using namespace std; class Osoba { private: std::string imie_; std::string nazwisko_; long long int pesel_; void mssg(std::string message, int counter) { std::cout << message << counter << std::endl; } public: static int counter; // konstruktor parametryczny i konstruktor domyslny Osoba(string imie = "Imie", string nazwisko = "Nazwisko", long long int pesel = 0): imie_(imie), nazwisko_(nazwisko), pesel_(pesel) { //mssg("konst counter=",counter++); } ~Osoba() { //mssg("dest counter=",--counter); } std::string getimie() const { return imie_; } std::string getnazwisko() const { return nazwisko_; } long long int getpesel() const { return pesel_; } // operator << friend ostream & operator << (ostream & os, const Osoba & o); // operator >> friend istream & operator >> (istream & os, Osoba & o); // operator == friend bool operator == (const Osoba & a, const Osoba & b); }; ostream & operator << (ostream & os, const Osoba & o) { os << o.imie_ << " " << o.nazwisko_ << " " << std::setfill('0') << std::setw(11) << o.pesel_ << endl; return os; } istream & operator >> (istream & is, Osoba & o) { is >> o.imie_ >> o.nazwisko_ >> o.pesel_; return is; } bool operator == (const Osoba & a, const Osoba & b) { return (a.pesel_ == b.pesel_ && a.imie_ == b.imie_ && a.nazwisko_ == b.nazwisko_); } #endif
#ifndef BAZADANYCH_H_ #define BAZADANYCH_H_ #include <algorithm> class BazaDanych { private: int liczbaOsob_ = 0; Osoba * osoby_ = nullptr; void mssg(std::string message, int counter) { std::cout << message << counter << std::endl;} public: static int counter; // konstruktor domyslny BazaDanych(int liczbaOsob = 0): liczbaOsob_(liczbaOsob) { if (liczbaOsob > 0) osoby_ = new Osoba[liczbaOsob]; //mssg("BD konst counter=", counter++); } // konstruktor kopiujacy BazaDanych(BazaDanych & b) { liczbaOsob_ = b.liczbaOsob_; osoby_ = new Osoba[liczbaOsob_]; std::copy(b.osoby_, b.osoby_ + liczbaOsob_, osoby_); //mssg("BD konst counter=", counter++); } // destruktor ~BazaDanych() { if (osoby_) { delete[] osoby_; osoby_ = nullptr; } //mssg("BD dest counter=", counter--); }; //operator przypisania kupujacego BazaDanych & operator = (const BazaDanych & bb) { if (this != & bb) { delete[] osoby_; liczbaOsob_ = bb.liczbaOsob_; osoby_ = new Osoba[liczbaOsob_]; std::copy(bb.osoby_, bb.osoby_ + liczbaOsob_, osoby_); } return * this; } // operator dodajacy osobe do bazy danych BazaDanych & operator + (const Osoba & o) { Osoba * temp = new Osoba[liczbaOsob_ + 1]; std::copy(osoby_, osoby_ + liczbaOsob_, temp); temp[liczbaOsob_] = o; delete[] osoby_; osoby_ = temp; liczbaOsob_++; return * this; } Osoba * beg ()const {return osoby_;} Osoba * end ()const {return osoby_+liczbaOsob_;} friend BazaDanych operator + (const BazaDanych & b1, const BazaDanych & b2); friend ostream & operator << (ostream & os, const BazaDanych & b); }; ostream & operator << (ostream & os, const BazaDanych & b) { for (int i = 0; i < b.liczbaOsob_; ++i) { os << b.osoby_[i]; } return os; } //operator + dodajacy dwie bazy BazaDanych operator + (const BazaDanych & b1, const BazaDanych & b2) { BazaDanych temp(b1.liczbaOsob_ + b2.liczbaOsob_); std::copy(b1.osoby_, b1.osoby_ + b1.liczbaOsob_, temp.osoby_); std::copy(b2.osoby_, b2.osoby_ + b2.liczbaOsob_, temp.osoby_ + b1.liczbaOsob_); return temp; } #endif
Jakub Nowak 71821412314 Anna Kowalska 24030712324 Zygmunt Wiśniewski 48282712334 Dorota Wójcik 01493012344 Dorota Kamińska 01493078944 Patryk Kowalczyk 08712212354 Zuzanna Kamińska 77312712364 Katarzyna Lewandowska 80633112384

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue