Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2012, 15:36   #1
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию Виртуальная ф-я и шаблон

Собственно сабж:
Есть класс
Код:
class DataBase
{	
public:
	DataBase():Deleted(0) {	};
	virtual ~DataBase() {};

	virtual void Print() const {};
	virtual void Edit() {};

	char Guid[37];
	bool Deleted;
};
и производный от него

Код:
class Client: public DataBase
{
public:

	Client();

	char FIO[121];
	char PhoneNomber[13];

	void Print() const;
};
шаблон
template<class Type> class DataFileCollection
имеет открытый метод void ShowAll();

Код:
template<class Type>
void DataFileCollection<Type>::ShowAll()
{
	int count = GetCount();
	Type * src;
	for(int i=0; i<count; ++i)
	{
		src = &GetByIndex(i);
		src->Print();
	}
}
ну и эту прикреплю чтобы не было вопросом что возвращает GetByIndex(i)
Код:
template<class Type>
Type DataFileCollection<Type>::GetByIndex(int index)
{
	Type data;
	GetByGuid(guidIndex.GetByIndex(index), data);
	
	return data;
}
Функция Print реализована в классе Client!
Класс шаблоный инициализирую типом Client!
Теперь вопрос, почему в методе ShowAll() вызывается Print() базового класса????

Последний раз редактировалось Dmitry333; 04.10.2012 в 15:39.
Dmitry333 вне форума Ответить с цитированием
Старый 04.10.2012, 15:46   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
src = &GetByIndex(i);
берешь адрес временного объекта. дальше не смотрел
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 04.10.2012, 15:47   #3
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
Код:
src = &GetByIndex(i);
берешь адрес временного объекта. дальше не смотрел
и? пожалуйста поподробнее, а то я новичёк(
Dmitry333 вне форума Ответить с цитированием
Старый 04.10.2012, 15:48   #4
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

вот что дебагер говорит
Изображения
Тип файла: jpg virt.jpg (72.4 Кб, 15 просмотров)
Dmitry333 вне форума Ответить с цитированием
Старый 04.10.2012, 15:55   #5
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
Код:
src = &GetByIndex(i);
берешь адрес временного объекта. дальше не смотрел
решил проблему так, все работает, но рационально ли??

Код:
src = new Type(GetByIndex(i));
src->Print();
delete src;
Dmitry333 вне форума Ответить с цитированием
Старый 04.10.2012, 17:08   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Type tmp(GetByIndex(u));
tmp.Print()

Так покрайней мере не надо выделять память
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальная клавиатура basil Общие вопросы Delphi 6 02.10.2014 08:16
Дано: таблица в Exel (3 столбца, 4000 строк) и шаблон документа. Задача: Распечатать один и тот-же шаблон документа, под Evgenya040305 Помощь студентам 2 24.11.2011 22:21
виртуальная и чисто виртуальная функции JiryPK Visual C++ 5 18.11.2011 00:38
Виртуальная память ordoss Общие вопросы C/C++ 1 12.01.2011 18:00