Множественное наследование в СБ
От: DavidSel  
Дата: 17.01.05 10:12
Оценка:
Здравствуйте все


Множественное наследование VCL классов не поддерживается.
Я же создал не VCL-класс (правда использующий всякие там TList*) и сделал его производным от 2х интерфейсов.

Все компилится, но работают только методы 1го в списке интерфейса.


class myclass: public Interface1, public Interface2
{
---
---
}


в таком варианте вызываются только методы Interface1, а если их местами поменять — то только методы Interface2.

Кто нить сталкивался с подобным?
История нас рассудит...
Re: Множественное наследование в СБ
От: Oleg A. Bachin Украина  
Дата: 17.01.05 15:52
Оценка:
Здравствуйте, DavidSel, Вы писали:

DS>Здравствуйте все



DS>Множественное наследование VCL классов не поддерживается.

DS>Я же создал не VCL-класс (правда использующий всякие там TList*) и сделал его производным от 2х интерфейсов.

DS>Все компилится, но работают только методы 1го в списке интерфейса.



DS>
DS>class myclass: public Interface1, public Interface2
DS>{
DS>---
DS>---
DS>}
DS>


DS>в таком варианте вызываются только методы Interface1, а если их местами поменять — то только методы Interface2.


DS>Кто нить сталкивался с подобным?


1. Интерфейсы не наследуют, а реализовывают
2. Если уж взялся за Си, то почитай интелектуальные указатели... подозреваю что у тебя идет явное преобразование вместо запроса интерфейса

MyObj.QueryInterface(Interface2, MyObj2);
Best regards,
Oleg A. Bachin
Re[2]: Множественное наследование в СБ
От: DavidSel  
Дата: 18.01.05 07:13
Оценка:
OAB>1. Интерфейсы не наследуют, а реализовывают
OAB>2. Если уж взялся за Си, то почитай интелектуальные указатели...

не надо пжста придираться к словам.
за Си я очень давно взялся и имел ввиду не общеизвестный метод запроса интерфейса, а метод получения указателя на него, используя смещение в вт.
История нас рассудит...
Re: Множественное наследование в СБ
От: eugals Россия  
Дата: 18.01.05 07:41
Оценка:
Здравствуйте, DavidSel, Вы писали:

DS>Все компилится, но работают только методы 1го в списке интерфейса.

Что значит "не работают"? Не компилируется? Исключение вылетает на рантайме?

Лучше приведи более полный пример, что было написано и как оно использовалось...
... << RSDN@Home 1.1.4 beta 3 rev. 215>> (WinAmp: Walt Disney Pictures — Can You Feel the Love Tonight (End Title))
Re: Множественное наследование в СБ
От: Беликович Россия  
Дата: 25.01.05 22:35
Оценка:
Здравствуйте, DavidSel, Вы писали про это?

class A{
public:
    virtual void RunA()=0;
};
class B{
public:
    virtual void RunB()=0;
};
class C: public A, public B{
public:
    virtual void RunA(){ printf("RunA\n"); }
    virtual void RunB(){ printf("RunB\n"); }
};

int _tmain(int argc, _TCHAR* argv[])
{
    C c;
    A* pa = &c;
    pa->RunA();

    B* pb = (B*)pa;    
    pb->RunB();        // error! Call RunA instead RunB !
    B* pb1 = (B*)(C*) pa;    // pb1 != pb
    pb1->RunB();        // good!

    return 0;
}
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.