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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 19:42   #1
Konicy
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 14
По умолчанию Работа с классом| C++

Здравствуйте!
Я только начинаю осваивать программирование, поэтому пока я, мягко говоря, чайник. Но хочу разобраться.
Вопрос заключается в следующем.
Вот я создаю класс. Каждый его элемент содржит слово(тип char) и число (int). И в какой-то момент мне нужно вывести все элементы класса в порядке возрастания этого самого числа. Как это сделать? Как перебрать все существующие на данный момент в программе элементы, чтобы сравнить эти числа? Нужно создавать массив? И как программа узнает, сколько уже имеется элементов?
Это, собственно, еще не все вопросы, на самом деле их куда больше, но, думаю, нужно все как-то по-порядку...
Мне бы, главное, алгоритм уяснить, конкретно, что с чем сравнивается, и какие есть способы... Просто пока я еще мало чего знаю, а страшный синтаксис меня, как новичка, пугает)) Особенно без комментариев)))
Вот и пытаюсь все перевести на русский и разобраться. Поможете?
Konicy вне форума Ответить с цитированием
Старый 17.12.2009, 20:33   #2
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Цитата:
Вот я создаю класс. Каждый его элемент содржит слово(тип char) и число (int). И в какой-то момент мне нужно вывести все элементы класса в порядке возрастания этого самого числа. Как это сделать?
А что ты подразумеваешь под словосочетанием "элемент класса"? Класс - это тип данных, типа структуры, только ещё имеет свои функции, предназначенные для работы с переменными - методы. Если у тебя в классе объявлена одна переменная типа int, то как-же ты выведешь его в порядке возрастания самого себя!? Тогда массив объявляй. Или ты подразумеваешь, что у тебя будет много объектов этого класса, и ты хочешь вывести переменные всех объектов упорядоченно? Ну заведи переменную статическую, которая будет счётчиком объектов. Тогда в конструкторе ты её инкрементируешь, а в деструкторе - декрементируешь. И всё - сортируй - не хочу! Удачи.
Darth.Vader вне форума Ответить с цитированием
Старый 17.12.2009, 20:58   #3
Konicy
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 14
По умолчанию

О, а так можно? Можно поставить такой счетчик? Обязательно попробую!
Но я имела в виду немного другое... У меня есть класс таких объектов: слово и количество букв в нем. Как определять количество букв, я знаю. И каждый раз в конструкторе вызывается эта функция и подсчитывает количество букв. Этот результат и есть число, которое является вторым полем класса. Дальше я определяю метод сложения двух элементов (при этом два слова соединяются в одно без пробела, а количество букв равно сумме чисел). С этим получилось. А вот с сортировкой не знаю как сделать...
Не знаю, как написать условие и сам цикл...
Konicy вне форума Ответить с цитированием
Старый 17.12.2009, 21:09   #4
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Долго втыкал в условие... Тебе нужно вывести строки, хранящиеся в полях объектов по возрастанию?
Если да, то:
Добавь в класс поле:
Код:
static int counter=0;
А в конструкторе и деструкторе: counter++; и counter--;
А затем в цикле от 1 до counter сортируешь. Алгоритмов сортировки много в интернете. Рекомендую "быструю сортировку".
Darth.Vader вне форума Ответить с цитированием
Старый 18.12.2009, 00:05   #5
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Присоединяюсь к пред. посту - счетчик и , возможно, записывание адреса элемента в массив какой- нибудь....это и недорого обойдется, всего по 4 байта на элемент, и вроде читабельно...
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 18.12.2009, 00:21   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Никак не могу понять зачем в классе счётчик? Счётчик чего? Вопрос, по-моему, в том, как сортировать массив классов по возрастанию длинны содержащегося в нём слова. Нельзя ли банально "пузырьком" или любым другим методом сортировки отсортировать?
Код:
class Word {
	char* m_word;
	int   m_wordlen;

public:
	Word(char* word) {
		m_word = word;
		m_wordlen = strlen(word);
	}

	int getlen() const {
		return m_wordlen;
	}
};

int main()
{
	Word words[4] = { "One", "Two", "Three", "Four" };
	for(int i = 0; i < 3; i++)
		for(int j = i+1; j < 4; j++)
			if(words[i].getlen() > words[j].getlen()) {
				Word temp = words[i];
				words[i] = words[j];
				words[j] = temp;
			}
...
netrino вне форума Ответить с цитированием
Старый 18.12.2009, 00:27   #7
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Ну можно и так)) Просто, первое, что пришло на ум - то и ляпнул.
Darth.Vader вне форума Ответить с цитированием
Старый 21.12.2009, 11:46   #8
Konicy
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 14
По умолчанию

Спасибо всем! Разобралась с сортировкой, хотя вот когда пытаюсь поставить счетчик в класс, компилятор выдает что-то вроде "в пределах класса могут быть инициализированы только статические константные данные-члены целого типа". Чего ему не нравится, не знаю...
А вариант netrino работает, спасибо. Но это ведь, как я понимаю, массив слов. А если у меня каждое слово по отдельности вводится вроде
Код:
char a[10];
cout<<"vvedite slovo: ";
cin>>a;
Word A(a);
- тогда ведь так нельзя?
А можно сделать какую-нибудь функцию, которая бы узнавала, сколько на данный момент имеется объектов класса? Это было бы бесценно...
Konicy вне форума Ответить с цитированием
Старый 21.12.2009, 12:16   #9
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Никак не могу понять зачем в классе счётчик? Счётчик чего? Вопрос, по-моему, в том, как сортировать массив классов по возрастанию длинны содержащегося в нём слова. Нельзя ли банально "пузырьком" или любым другим методом сортировки отсортировать?
Код:
class Word {
	char* m_word;
	int   m_wordlen;

public:
	Word(char* word) {
		m_word = word;
		m_wordlen = strlen(word);
	}

	int getlen() const {
		return m_wordlen;
	}
};

int main()
{
	Word words[4] = { "One", "Two", "Three", "Four" };
	for(int i = 0; i < 3; i++)
		for(int j = i+1; j < 4; j++)
			if(words[i].getlen() > words[j].getlen()) {
				Word temp = words[i];
				words[i] = words[j];
				words[j] = temp;
			}
...
Классно ты задвинул - МАссив классов
А по теме - вдруг девушке надо посчитать все объекты, созданные и без массива, и не с помощью new, а прост овсе объекты, которые сейчас существуют? ну и соответственно отсортировать...считать их и записывать указатели на них в массив какой-нибудь
Считать, естественно, с помощью статистической переменной да и сортировку по идее можно статистической функцией...
Если я помог вам - порадуйте меня, нажмите на весы слева

Последний раз редактировалось RoS; 21.12.2009 в 12:19.
RoS вне форума Ответить с цитированием
Старый 21.12.2009, 13:03   #10
Konicy
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 14
По умолчанию

Цитата:
посчитать все объекты, созданные и без массива, и не с помощью new, а прост овсе объекты, которые сейчас существуют? ну и соответственно отсортировать.
Ага, вот именно так мне и нужно!)) Сейчас пытаюсь вставить счетчик,
Код:
static int counter;
но только он у меня никуда не становится... Когда его в класс пишу, выдает строчку: "в пределах класса могут быть инициализированы только статические константные данные-члены целого типа" (на русском пишет), а если вне класса, то компилирует нормально, зато потом выстреливает Debug Assertion Failed. Что бы это могло означать?
Konicy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с классом и объектами!!! Sudeki Помощь студентам 0 13.12.2009 15:20
Проблема с классом list Homer_J_Simpson Общие вопросы C/C++ 4 28.11.2009 22:03
Работа с Классом и кое что по OpenGl Seran4ek Помощь студентам 7 28.11.2009 21:11
Работа с классом TStringStream в Borland C++ profi Общие вопросы C/C++ 2 26.07.2009 20:14
C++ работа с классом VadEr Помощь студентам 2 17.05.2009 12:33