dziedziczenie , interfejsy , dziedziczenie

0

no więc wygląda to tak :
class a
{
public:
int ala();
};
class b:public a
{
public:
int x();
};
class Interface_b
{
public:
int x() = 0;
int ala() = 0;
};
moge teraz odziedziczyć ten interfejs_b przez a i bedzie działał (inter = new b)
ale problem polega na tym że po a dziedziczą też inne klasy- wniosek .. nie moge w a dziedziczyć po tym interfejsie - więc nie moge tak zrobić
jakie jest wyjście ? jak sprawić aby interface_b zadziałał ? tylko nie mówcie mi że mam przepisywać funkcje z klasy b do a i robic 10 takich kopi

0

Troche niezbyt jasno piszesz, moze o to ci chodzi ?

class Interface_b : public b
{
...

0

nie , własnie nie o to chodzi .

wiem że słabo tłumacze wiec postaram się podać przykłady:
do tej pory robiłem tak :

class X:public Interface_X
{
int ala();
double costam();

};

class Interface_X
{
int ala()=0;
double costam()=0;

};

teraz mogłem napisać tak :
Interface_X = new X; mogła to zrobić jakaś funkcja i w ten sposób nikt nie widział co to za klasa jest aktualnie na interfejsie

teraz mam identyczną sytuacje tyle że klasa X połowe swoich funkcji dziedziczy po innej klasie
a wiec jeśli napisze
class X:public Y ,public Interface_X

to wyskakuje mi bład że Interface_X nie zdefiniowała czysto wirtualnej funkcji która jest zdefioniowana w Y
moge dać dziedziczenie po tym interfejsie jeszcze w Y wtedy wszystko będzie działało
tyle że jak jakaś inna klasa odziedziczy po Y to będzie musiała zdefioniować wszystko to co zawiera czysto wirtualny intefejs X

0

Jeśli klasa X dziedziczy po interfejsie Intefrejs_X, to musi definiować WSZYSTKIE czyste funkcje wirtualne niezależnie od tego, czy dziedziczy po czymś jeszcze, czy nie.

Nie wiem, co chcesz osiągnąć. Tak można, ale wtedy w X musisz definiować wszystko to co w Interface_X:

Y Interface_X

| |
| |
+++
X

Można i tak:

Interface_X
^
|
|
Y
^
|
|
X

W tej syt. X może być nawet puste, a Y zawiera domyślne implementacje. Dziedzicząc po Y nie musisz nic definiować.

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