Dwie implementacje i dwie przestrzenie nazw

0
#include <iostream>
#include <string>
using namespace std;

namespace kartoteka_Osoba
{
    class Osoba
    {
        public:
        string ii,nn;
        public:
        Osoba(string imie, string nazwisko)
        {
            ii = imie;
            nn = nazwisko;
        }
        string getImie()
        {
            return ii;
        }
        string GetNazwisko()
        {
            return nn;
        }
    };
};
namespace kartoteka_mockup_Kartoteka
{
    class Kartoteka
    {
        public:
        void dodaj(kartoteka_Osoba::Osoba){}
        void usun(kartoteka_Osoba::Osoba) {}
        int rozmiar() {return 1;}
        bool CzyZawiera(kartoteka_Osoba::Osoba) {return true;}
        kartoteka_Osoba::Osoba* pobierz(int index)
        {
            return new kartoteka_Osoba::Osoba("Gall","Anonim");
        }
    };
};
namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        public:
        void dodaj(kartoteka_Osoba::Osoba)
        {

        }
    };
}
int main()
{
    using namespace kartoteka_mockup_Kartoteka;
    Kartoteka kartoteka;
    kartoteka.rozmiar();
    kartoteka.pobierz(2);

    using namespace kartoteka_impl_Kartoteka;
    kartoteka_Osoba::Osoba ziomek("mmm","asd");
    Kartoteka kartoteka;
    kartoteka.dodaj(ziomek);

    return 0;
}
 

Jak wyświetlić to co zwróciła funkcja pobierz operatorem new ? W drugiej implementacji z przestrzeni nazw kartoteka_impl_Kartoteka funkcja dodaj już ma coś robić. Nie ma opisu co ma robić, tylko nazwe funkcji, czyli ma jakoś dodawać osobę, ale nie wiem jak to zrobić ?

0

Aby dodawać do siebie obiekty klasy musisz przeładować(przeciążyć) operator dodawania "+" lub "+=".

Osoba operator+(const Osoba& v2) const
{
	return Osoba(ii +v2.ii, nn + v2.nn);
}

Resztę informacji o przeładowaniu operatorów znajdziesz na Google.

Przy okazji:

  1. Po co Ci dwa razy public w klasie Osoba?
  2. Skoro zmienne w klasie Osoba są publiczne to po co ci metody które je zwracają?
0

Pole składowe miały być private, coś testowałem i zapomniałem zmienić.
Nie bardzo rozumiem co napisałeś. Znam operatory przeciążenia, ale jakoś one dla mnie nie pasują, bo klasa Osoba ma konstruktor to imię i nazwisko jest od razu przypisywane dla obiektu.

Nie wiem czy nie chodzi o to aby te osoby dodawać jakoś do kartoteki.

0

Pomoże ktoś ?

0

A co jest nie tak ;p ? Treść zadania ?

0

zabrałeś się do zadania od d**y strony

0

Czemu od d**y strony ? To jak to inaczej napisać ?

0

nie masz bazy danych Osób, może to być np. mapa, pisałem to na kolanie więc forumowe czepiaki, wara :D

http://melpon.org/wandbox/permlink/nwxG8GDwPYROe8Sl

0

Nie za wiele mi to pomogło. Na razie nie wiem jak uzupełnić te funkcję w przestrzeni kartoteka_impl_Kartoteka. Kod:

#include <iostream>
#include <string>
using namespace std;

namespace kartoteka_Osoba
{
    class Osoba
    {
        public:
        string ii,nn;
        public:
        Osoba(string imie, string nazwisko)
        {
            ii = imie;
            nn = nazwisko;
        }
        string getImie()
        {
            return ii;
        }
        string GetNazwisko()
        {
            return nn;
        }
    };
};
namespace kartoteka_mockup_Kartoteka
{
    class Kartoteka
    {
        public:
        void dodaj(kartoteka_Osoba::Osoba){}
        void usun(kartoteka_Osoba::Osoba) {}
        int rozmiar() {return 1;}
        bool CzyZawiera(kartoteka_Osoba::Osoba) {return true;}
        kartoteka_Osoba::Osoba* pobierz(int index)
        {
            return new kartoteka_Osoba::Osoba("Gall","Anonim");
        }
    };
};
namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        public:
        void dodaj(kartoteka_Osoba::Osoba)
        {

        }
    };
}
int main()
{
    using namespace kartoteka_mockup_Kartoteka;
    Kartoteka kartoteka;
    kartoteka.rozmiar();
    kartoteka.pobierz(2);

    using namespace kartoteka_impl_Kartoteka;
    kartoteka_Osoba::Osoba ziomek("mmm","asd");
    Kartoteka kartoteka;
    kartoteka.dodaj(ziomek);

    return 0;
}
 
0

Próbuje coś zrobić za pomocą listy ale nie wychodzi:

namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        string tablica[20];
        public:
        void dodaj(kartoteka_Osoba::Osoba)
        {
            tablica[0] = kartoteka_Osoba::Osoba;
        }
    };
} 
0
namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        string tablica[20];
        public:
        void dodaj(kartoteka_Osoba::Osoba)
        {
            tablica[0] = kartoteka_Osoba::Osoba;
        }
    };
} 

Odpal jakiś kurs i rozpisz sobie całość na kartce pod tytułem "co ja do cholery robię"?
Składnia języka to nie jest miejsce na eksperymenty.
To co robisz nie leży nawet blisko listy.

0

Pomyliłem się, miałem napisać za pomocą tablicy.

0

Czepiam się tego fragmentu:

void dodaj(kartoteka_Osoba::Osoba)
        {
            tablica[0] = kartoteka_Osoba::Osoba;
        }

Czy jesteś w stanie powiedzieć co on według Ciebie robi?

dodanie znacznika <code class="cpp"> - @furious programming

0

Jeśli w mainie wywołałbym to funkcję tak:

kartoteka.dodaj(ziomek) 

to chciałem aby do tablicy o indeksie 0 dodawał tą osobe, czyli ziomka.

A jak to poprawnie na tablicy zapisać?

0

Teraz tak próbuje:

namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        kartoteka_Osoba::Osoba tablica[20];
        public:
        void dodaj(kartoteka_Osoba::Osoba)
        {
            kartoteka_Osoba::Osoba tablica[0] = kartoteka_Osoba::Osoba;
        }
    };
} 
0

No nie wiem gdzie ja tu teraz robię błąd przy dodawniu osoby w przestrzeni impl_kartoteka:

#include <iostream>
#include <string>
using namespace std;

namespace kartoteka_Osoba
{
    class Osoba
    {
        string ii,nn;
        public:
        Osoba(string imie, string nazwisko)
        {
            ii = imie;
            nn = nazwisko;
        }
        string getImie()
        {
            return ii;
        }
        string GetNazwisko()
        {
            return nn;
        }
    };
};
namespace kartoteka_mockup_Kartoteka
{
    class Kartoteka
    {
        public:
        void dodaj(kartoteka_Osoba::Osoba){}
        void usun(kartoteka_Osoba::Osoba) {}
        int rozmiar() {return 1;}
        bool CzyZawiera(kartoteka_Osoba::Osoba) {return true;}
        kartoteka_Osoba::Osoba* pobierz(int index)
        {
            return new kartoteka_Osoba::Osoba("Gall","Anonim");
        }
    };
};
namespace kartoteka_impl_Kartoteka
{
    class Kartoteka
    {
        kartoteka_Osoba::Osoba tablica[20];
        public:
        void dodaj(kartoteka_Osoba::Osoba m)
        {
            kartoteka_Osoba::Osoba tablica[0] = m;
        }
    };
}
int main()
{

    using namespace kartoteka_impl_Kartoteka;
    kartoteka_Osoba::Osoba ziomek("mmm","asd");
    Kartoteka kartoteka;
    kartoteka.dodaj(ziomek);

    return 0;
} 

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