![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
Ситуация такова: задали ручками написать шаблонный ас.массив... т.е. ключи могут быть различных типов... однако в некоторых функциях реализация для разных типов будет различной... т.е. надо изначально знать тип передаваемой переменной. Есть ли функции, которые могут это сообщить? или я просто что-то не понимаю? Заранее спасибо.
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
#2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Почему бы просто не перегрузить функции для разных типов?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
Начал писать... При выполнении обнаруживается ошибка с памятью... Кто протестит и объяснит большое спасибо.
Код HTML:
#include <iostream>
#include "Asmas.h"
#include "String.h"
#include "List.h"
using namespace std;
int main ()
{
char * buf = new char [20];
cin >> buf;
Asmas mas;
mas.add(buf);
delete buf;
system ("PAUSE");
return 0;
}
Код HTML:
#ifndef String_h
#define String_h
#include <iostream>
using namespace std;
class String
{
private:
int size;
char * str;
public:
String ();
~String ();
String & operator = (char * s);
bool operator == (char * s);
friend ostream & operator <<(ostream & stream, const String & s);
};
String :: String ()
{
str = NULL;
}
String ::~String()
{
delete [] str;
}
String & String :: operator = (char * s)
{
size = strlen(s) + 1;
if(str)
delete [] str;
str = new char [size];
strcpy(str,s);
return(*this);
}
bool String ::operator == (char *s)
{
if(strcmp(str,s) == 0)
{
return true;
}
else
return false;
}
ostream & operator <<(ostream & stream, const String & s)
{
stream << s.str;
return stream;
}
#endif
Код HTML:
#ifndef List_h #define List_h #include "String.h" #include <iostream> using namespace std; struct Elem { Elem * next; Elem * prev; String word; int amount; }; struct List { Elem * begin; Elem * list; }; void push_beg (List * my_list, char * buf); void push_end (List * my_list,char * buf); bool isempty (List * my_list); void del (List * my_list); List * create (); void print ( List * my_list ); void search (List* my_list, char * s); void pop_beg (List * my_list); List * create() { List * a = new List; a->begin = NULL; a->list = NULL; return a; } void search (List* my_list,char * buf) { bool t = false; my_list->list = my_list->begin; while (my_list->list->next != NULL) { if(my_list->list->word == buf) { my_list->list->amount++; t = true; } my_list->list = my_list->list->next; } if (t == false) { push_end(my_list,buf); } } bool isempty (List * my_list) { if(my_list->begin == NULL) { return true; } return false; } void push_beg (List * my_list,char * buf) { Elem * newit; newit = (Elem *)malloc( sizeof( struct Elem) ); newit->word = buf; newit->amount = 1; newit->prev = NULL; my_list->begin = newit; newit->next = NULL; my_list->list = my_list->begin; } void push_end (List * my_list, char * buf) { Elem * newit; newit = (Elem*)malloc(sizeof(struct Elem)); my_list->list = my_list->begin; while (my_list->list->next!= NULL) { my_list->list = my_list->list->next; } newit->next = NULL; newit->prev = my_list->list; newit->amount = 1; newit->word = buf; my_list->list->next = newit; my_list->list = my_list->list->next; } void del (List * my_list) { while(my_list->begin != NULL ) { pop_beg (my_list); } delete my_list; } void pop_beg (List * my_list) { Elem * newit; my_list->list = my_list-> begin; newit = my_list-> begin; my_list->begin = my_list->list->next; if(newit!=NULL) { delete newit; } } void print ( List * my_list ) { int i = 1; my_list->list = my_list->begin; Elem * newit = my_list->list; while (newit!= NULL ) { cout << newit->word << " = "<<newit->amount<<"\n"; i++; newit = newit->next; } } #endif Код HTML:
#ifndef Asmas_h #define Asmas_h #include "List.h" #include "String.h" class Asmas { private: List * my_list; public: Asmas (); ~Asmas (); /*int operator [] (char * str);*/ void add (char * buf); void Print (); }; void Asmas ::Print () { print(my_list); } void Asmas::add (char * buf) { if(isempty(my_list)) { push_beg (my_list,buf); } else { search(my_list,buf); } } Asmas ::~Asmas() { del(my_list); } Asmas::Asmas() { my_list = create (); } #endif
<= P.S. если я тебе помог нажми весы слева <=
Последний раз редактировалось assasin; 01.06.2009 в 15:04. |
![]() |
![]() |
![]() |
#4 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Хм.. Что-то у меня в файле List.h компилятор не знает, что такое String. Соответственно, ругается на все методы, с ним связанные..
Притом ему не нравится именно подключение в Asmas.h И так и так их тасовал.. Пробовал в MinGW и в Билдере. Странное что-то..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
писал в MSVS 2005... все компилится
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
#6 | |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
![]() Цитата:
Код:
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
ISergeyN, писать пока начал без шаблонов... причину ошибки понять не могу
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
#8 |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
![]()
Отладчиком пользуйтесь..
Ты здесь Код:
тоесть у обекта word небыл вызван конструктор. по етому здесь Код:
замени все Код:
Код:
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
Все заработало, спасибо! +1
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 123
|
![]()
количество вхождений слов в текст считает без ошибок. осталось шаблоны прикрутить, сортировку и поиск... Интересно, эту задачу можно было написать за полторы пары? а то нам ее в качестве, как выразились, самой простой зачетной давали... заинтересовала
<= P.S. если я тебе помог нажми весы слева <=
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль. Задачка по массиву | -ZaK- | Помощь студентам | 6 | 18.10.2010 00:08 |
ЗАДАЧИ ПО МАССИВУ!! СРОЧНО! | НАСТЯ 18:) | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.05.2009 15:23 |
Помогите с задачкой по массиву | Stiff | Помощь студентам | 5 | 19.03.2009 00:49 |
узнать, принадлежит ли значение массиву | Жираффа | Microsoft Office Excel | 4 | 25.03.2008 14:59 |