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

Oddzielanie klas dziedziczących wirtualnie.

Ostatnio zmodyfikowano 2015-07-28 19:56
Autor Wiadomość
Kaikso
Temat założony przez niniejszego użytkownika
» 2015-07-25 19:58:58
Jakieś rozwiązanie to jest, co prawda nie jest kompleksowe i wydaje mi się „krótkowzroczne” ale na obecną chwilę wystarczy.

Jeśli zna ktoś jakieś ciekawe mechanizmy, chodź by na emulacje w jakimś stopniu tego efektu, to proszę o podzielenie się wiedzą. Wszelkie pomysły mile widziane.
P-135248
Kaikso
Temat założony przez niniejszego użytkownika
» 2015-07-28 19:56:30
Znalazłem rozwiązanie. Druga z klas basowych ma być dziedziczona wirtualnie:

C/C++
#include <iostream>

struct Bazowa_A { int a; };
struct Bazowa_B { int b; };
struct Bazowa_C { int c; };

// Klasy pochodne - I Pokolenie
class Pochodna_AB
    : virtual public Bazowa_A
     , virtual public Bazowa_B
{ };

class Pochodna_AC
    : virtual public Bazowa_A
     , virtual public Bazowa_C
{ };

class Pochodna_BC
    : virtual public Bazowa_B
     , virtual public Bazowa_C
{
public:
    Pochodna_BC( int b, int c )
    {
        this->b = b;
        this->c = c;
    }
   
    virtual void test_bc()
    {
        std::cout << "----- test_bc() ------" << std::endl;
        std::cout << "b = " << b << std::endl;
        std::cout << "c = " << c << std::endl;
    }
};

// Klasy pochodne - II Pokolenie
class Pochodna_AB_BC // Klasa Bazowa_B jest wspólna dla obu klas bazowych
    : virtual public Pochodna_AB
     , virtual public Pochodna_AC
{
public:
    Pochodna_AB_BC( int a, int b, int c )
    {
        this->a = a;
        this->b = b;
        this->c = c;
    }
   
    virtual void test_abc()
    {
        std::cout << "----- test_abc() ------" << std::endl;
        std::cout << "a = " << a << std::endl;
        std::cout << "b = " << b << std::endl;
        std::cout << "c = " << c << std::endl;
    }
};

// Nasza klasa
class Klasa_X final
    : public Pochodna_AB_BC
     , virtual public Pochodna_BC
{
public:
    Klasa_X()
        : Pochodna_BC( 0, 1 )
         , Pochodna_AB_BC( 2, 3, 4 )
    { }
};

int main()
{
    Klasa_X x;
    x.test_bc();
    x.test_abc();
   
    return 0;
}

Zamykam temat.
P-135357
1 2 « 3 »
Poprzednia strona Strona 3 z 3