Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

dwie przestrzenie nazw i różne implementacje

Ostatnio zmodyfikowano 2015-04-21 10:33
Autor Wiadomość
arek213
Temat założony przez niniejszego użytkownika
dwie przestrzenie nazw i różne implementacje
» 2015-04-20 19:34:50
MógłBy ktoś podpowiedzieć jak napisać funkcje w przestrzeni nazw impl_Kartoteka ? Bo przestrzeń nazw mockup ma nic nie robić.

C/C++
#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
    {
       
    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;
}

I jeśli potem wpisuje komendę using namespace kartoteka_impl_Kartoteka, to jak zrobić aby przy deklaracji obiektu Kartoteka kartoteka nie pokazywało błędu, bo pasuje to również do wcześniejszej przestrzeni nazw.
P-131219
michal11
» 2015-04-20 19:37:34
Nie używaj using namespace.
P-131220
arek213
Temat założony przez niniejszego użytkownika
» 2015-04-20 19:44:04
A jak zaimplementować te funkcje w przestrzeni impl_Kartoteka ?
P-131221
michal11
» 2015-04-20 19:55:59
Czyli chodzi ci o to, że deklaracja klasy ma być w mockup ale definicje metod w impl ? Ciekawe podejście, ja bym spróbował zrobić coś takiego:
C/C++
namespace impl
{
    using namespace mockup;
    //definicje
};

ale nie mam pewności czy to zadziała, ktoś mądrzejszy musi się wypowiedzieć czy takie coś jest w ogóle możliwe.
P-131223
arek213
Temat założony przez niniejszego użytkownika
» 2015-04-20 20:03:53
Nie ma tak zostać jak jest.Chodzi o to aby mieć dwie implementacje interfejsu Kartoteka.Przestrzeń nazw mockup mam mieć "puste" funkcje, natomiast przestrzeń nazw impl_kartoteka już ma mieć funkcję, które mają to robić co mają w nazwie.
P-131224
arek213
Temat założony przez niniejszego użytkownika
» 2015-04-20 20:37:54
czyli w przestrzeni impl, funkcja dodaj ma dodawać osoby do kartoteki,ale nie wiem jak to zrobić.
P-131231
darko202
» 2015-04-21 10:33:57
aby uniknąć niejednoznaczności i różnych problemów z widocznością
odwołujemy się do operatora ::

np. std::cout  "tu odwołuje się do funkcji cout z namespace std";

podobnie z klasami
C/C++
class Mebel;
{
    ...
    void Test {...}
    ...
}

class Krzesla
    : Mebel;
{
    ...
    void Test {...}
    ...
}

//wywołanie
Krzes ł o k;
k.Mebel::Test(); // metoda z klasy bazowej
k.Test() // metoda z klasy

P-131242
« 1 »
  Strona 1 z 1