powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не происходит вызов виртульной функции ?
20 сообщений из 20, страница 1 из 1
Почему не происходит вызов виртульной функции ?
    #38904920
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
class TElmtBase
{
	protected:
	    virtual void InitDBComponent( ) = 0;

	public:

	void invoke()
	{
	      InitDBComponent(  );
	}

	TElmtBase( )
	{
		InitDBComponent( );
	}
};

class TUserList : public TElmtBase
{
	typedef TElmtBase Inherited;

	protected:
		void InitDBComponent( )
		{
			ShowMessage( "10000");
		}

	public:
	  TUserList() : Inherited(  )
	  {
		 // invoke();
	  }
};


   TElmtBase *UserList = new TUserList;

// Или

    TUserList *UserList = new TUserList;

// И так и сяк пробовал



при вызове функции invoke(); все работает. делал по аналогии с Delphi. Там работает без invoke();, а в С++ нет.
Почему так ?
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904921
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

Почему функцию InitDBComponent( ); нельзя вызвать в базовом классе в конструкторе, что бы она была вызвана в производном ?
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904924
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто разрешил вызывать виртуальную функцию в конструкторе базового класса?
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904925
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

Ну я по аналогии Delphi делал.

type
TElmtBase = class

protected
procedure InitDBComponent; abstract; virtual;
public
constructor Create;
end;

constructor TElmtBase.Create;
begin
InitDBComponent;
end;

type
TUserList = class( TElmtBase )

protected
procedure InitDBComponent; override;

end;

procedure TUserList.InitDBComponent;
begin

end;
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904926
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323,

блиин. код в теги не заключил
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904927
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323блиин. код в теги не заключил
это не беда, в отличие от вызова виртуальной функции из конструктора
gera3323Ну я по аналогии Delphi делал.
забудьте аналогии
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904931
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

хорошо, забуду. приведите правильный пример вызова, если это не сложно
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904934
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323при вызове функции invoke(); все работает.
вот собственно и решение
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904935
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

понятно. а почему так сделано, что нельзя осуществлять вызов из конструктора ?
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904943
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323Изопропил,

понятно. а почему так сделано, что нельзя осуществлять вызов из конструктора ?
чтоб не вызывать метод ещё не сконструированного объекта
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38904957
gera3323
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

спасибо
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905048
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323gera3323,

Почему функцию InitDBComponent( ); нельзя вызвать в базовом классе в конструкторе, что бы она была вызвана в производном ?

можно вызывать.
и вызываться будет правильная функция.
та, чьим экземпляром в данный момент является объект.

правда, боюсь тебе это не понравится.
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905049
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323Изопропил,

хорошо, забуду. приведите правильный пример вызова, если это не сложно

у тебя нет ничего неправильного.
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905050
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gera3323Изопропил,

понятно. а почему так сделано, что нельзя осуществлять вызов из конструктора ?

можно вызывать. виртуальную функцию можно откуда угодно вызывать, кроме статистических методов.
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905064
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paragraph 10.4/6 of the C++11 Standard:
Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a virtual call (10.3) to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined.
вот такая беда правда есть
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905069
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

ну вызвать то можно... :-)
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905073
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivИзопропил,

ну вызвать то можно... :-)
но мы ведь стремимся получать предсказуемые результаты :)
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905164
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

Можно определить pure virtual function с пустым телом, и результат будет предсказуем.
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905179
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivpure virtual function с пустым телом
?
...
Рейтинг: 0 / 0
Почему не происходит вызов виртульной функции ?
    #38905192
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилно мы ведь стремимся получать предсказуемые результаты :)pure virtual function call вполне себе предсказуемый результат
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не происходит вызов виртульной функции ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]