Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата:
в данном коде явная ошибка:
Код: Выделить весь код
E* p;
p->L;
Это не реальный код, а теоретический. Все имена - теоретические. Первой строкой я хотел показать, что это указатель на класс E и ничего больше. Надо было добавить многоточия? Предполагалось, что он уже инициализирован нормальным адресом класса при обращении к нему во второй строке.
Затем производится обращение к чистой виртуальной функции. Я не совсем понимаю механизм, по которому будет вызвана функция, стоящая за этим L, но функция, которая будет вызвана, определена, где-то в другом месте. Переопределять L в этом классе вообще нельзя. Надо переопределять то, что стоит за этим L. Но как допустим найти, какая именно? Я не понимаю взаимосвязи между вот этой чисто виртуальной функцией, и той функцией, которая будет вызвана при обращении к ней, т.е. p->L.
Класс E не является наследником других классов, но у него есть наследники.

В реальном рабочем коде примерно следующее.

Код: Выделить весь код
class E
{
public:
	virtual BOOL L(int) = 0;
...
};


class T : public R, public E
{
...
}

class C : public E
{
public:
...
};

class F
{

public:
	virtual BOOL LT(const z&, E*);	
};



BOOL F::LT(const z& p, E* px)
{
if(!px || !px->L(1))  // что за функция L будет вызвана? 
	return FALSE;
}

-------
Ehhh.. what's up, doc?..


Последний раз редактировалось mrcnn, 06-11-2008 в 17:10.


Отправлено: 16:37, 06-11-2008 | #3