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

[C++] Deklaracje zapowiadające klasy

Ostatnio zmodyfikowano 2013-12-19 22:31
Autor Wiadomość
dualshot
Temat założony przez niniejszego użytkownika
[C++] Deklaracje zapowiadające klasy
» 2013-12-19 18:14:58
witam,
mój problem dotyczy deklaracji zapowiadających. mianowicie: jak użyć metody z zapowiedzianej klasy? oto kod który mam nadzieję wszystko rozjaśni
C/C++
#include <iostream>
#include <cstdlib>
using namespace std;

//Deklaracja zapowiadająca
namespace P_I
{
    class BB;
}
namespace P_II
{
    class OO
    {
    public:
        P_I::BB * box;
        OO()
        { //tutaj chce uzyc metody z zapowiedzianej klasy
            box.metoda(); //error
        }
    };
}
namespace P_I
{
    class BB
    {
    public:
        void metoda()
        {
            cout << "BB.metoda";
        };
    };
}
oczywiście logicznie rzecz biorąc zdaję sobie sprawę dlaczego przykład nie skompiluje się, ale nie wiem jak pozbyć się problemu.
jeśli pamiętacie/macie gdzieś pod ręką literaturę odnoszącą się do deklaracji zapowiadających to byłbym wdzięczny.
pozdrawiam i z góry dzięki za pomoc
P-99653
Monika90
» 2013-12-19 20:14:58
Musisz umieścić definicję konstuktora OO() po deklaracji funkcji BB::metoda
C/C++
namespace P_I
{
    class BB;
}

namespace P_II
{
    class OO
    {
    public:
        P_I::BB * box;
        OO();
    };
}

class P_I::BB
{
public:
    void metoda() { };
};

inline P_II::OO::OO()
{
    box->metoda();
}

Ewentualnie można też użyć polimorfizmu, tzn. szablonów albo f. wirtualnych, co pozwala na wykonywanie operacji na obiektach bez znajomości ich konkretnego typu.
P-99661
dualshot
Temat założony przez niniejszego użytkownika
» 2013-12-19 21:51:42
właśnie tego się obawiałem, tzn. zagmatwania kodu. w takim razie nie pozostaje mi nic innego jak przyswojenie szablonów. dzięki wielkie.
P-99673
Monika90
» 2013-12-19 22:03:21
Nie wiem o jakim zagmatwaniu mówisz. Dla mnie wygląda prosto.

Po co ci w ogóle deklaracja zapowiadająca, chesz mieć dwie klasy, które wywołują swwoje składowe nawzajem?
P-99676
dualshot
Temat założony przez niniejszego użytkownika
» 2013-12-19 22:31:41
zagmatwania w sensie definiowania funkcji(w tym wypadku konstruktora) poza klasą (nie znoszę skakania po kodzie w poszukiwaniu czegokolwiek)

tak, własnie o to mi chodzi. po prostu mam klasę 'Osoba' w której mam funkcję 'wypisz()'. do tego napisałem sobie klasy 'Node' i 'List' (tak, do stworzenia listy jednokierunkowej), które będą tworzyć listę obiektów typu 'Osoba'. w klasie 'List' mam funkcję 'display()' i ona korzysta z funkcji 'wyswietl()' każdego obiektu 'Osoba'.

mam taki kaprys żeby klasy które nie tworzą programu pod względem biznesowym (czyli tak jak 'lista' jest tylko strukturą danych) wrzucić na samą górę pliku. tutaj oczywiście ujawnia się moje infantylne podejście do programowania i brak być może podstawowej wiedzy ale jeszcze nie przywykłem nawet do dzielenia projektu na pliki :P
P-99679
« 1 »
  Strona 1 z 1