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

[C++] Przekazanie stworzonego obiektu do klasy. Problem z konst. kopiującym i dziedziczeniem.

Ostatnio zmodyfikowano 2011-07-25 00:59
Autor Wiadomość
akwes
Temat założony przez niniejszego użytkownika
[C++] Przekazanie stworzonego obiektu do klasy. Problem z konst. kopiującym i dziedziczeniem.
» 2011-07-25 00:10:14
Otóż problem jest logicznie złożony :P.

Oto pewne uproszczone, teoretyczne klasy:
C/C++
class Abstrakcyjna
{
public:
    Abstrakcyjna() { };
    virtual void Draw() { cout << "Cos tam rysuje!"; };
   
};

class Nowa
    : public Abstrakcyjna
{
public:
    int wazny_element;
    Nowa() { };
    void Draw() { cout << "Rysuje nowa!"; };
};

class Stara
    : public Abstrakcyjna
{
public:
    int wazny_element;
    Stara() { };
    void Draw() { cout << "Rysuje stara!"; };
};

No i sobie potem robię tak:
C/C++
// ===== main.cpp
Abstrakcyjna * obiekt = new Nowa(); // Dzis bedzie mi potrzebna Nowa
obiekt->Draw();

I faktycznie zobaczymy

Rysuje nowa!

Ale teraz mam klasę:
C/C++
class NowoStara
{
public:
    Abstrakcyjna obiekt;
    NowoStara( Abstrakcyjna * wsk ) { /* tu powinen być konsktrutor kopiujący */ };
};
Jak wykonać ten konstruktor?
C/C++
Abstrakcyjna obiekt = Abstrakcyjna( wsk ); // brakuje pewnie jeszcze znaczka przy wsk
Stworzy obiekt, który będzie pisał
Cos tam rysuje!
 Co zrobić aby konstruktor wiedział jaką klasę ma stworzyć? Raz będę przesyłał obiekt Nowa a raz obiekt Stara, nie mogę mu powiedzieć dokładnie które z nich to będzie.
P-36910
malan
» 2011-07-25 00:53:32
Napisz mu to po prostu.
C/C++
class NowoStara
{
public:
    Abstrakcyjna obiekt;
    NowoStara( Type * object )
    {
        /*
        @GCC:
        Teraz się stary skup! Ale tak naprawdę się skup!
        Jeżeli @Type będzie obiektem klasy 'Nowa' to wiedz, że masz stworzyć obiekt typu 'Nowa'.
        W przeciwnym razie, jeżeli @Type będzie obiektem klasy 'Stara' to wiedz, że masz stworzyć obiekt typu 'Stara'.
        Już nie muszisz się skupiać! Skończyłem. Obiecaj, że to zapamiętasz!
        */
    }
};
P-36911
akwes
Temat założony przez niniejszego użytkownika
» 2011-07-25 00:59:11
Mam to teraz zrobione na if-fach :P I tak mu to tłumaczę :P tylko brzydko wygląda mi parametr dodatkowy, którego sądzę że mogłoby nie być :P

Chyba że da się jakoś sprawdzić typ danej i zrobić if w stylu
C/C++
if( wsk == class Stara )
 ?

Hm.. TypeID z typeinfo ?

Tak. Nawet zwraca cstring "class nazwa" :) Da rade zarobić na tym.
P-36912
« 1 »
  Strona 1 z 1