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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 16:10   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Объявление массива класса в самом классе

Код:
class TMenuItem {
public:
	TMenuItem() {
		PosX = 0;
		PosY = 0;
		Caption = "";
		cout << "Initialize TMenuItem...\n";
	}

	~TMenuItem() {

	}

	void FillTheData(int X, int Y, string Capt) {
		PosX = X;
		PosY = Y;
		Caption = Capt;
		return;
	}

	void DrawItem() {
		gotoxy(PosX, PosY);
		cout << Caption.c_str();
	}

	void DrawList() {

	}

	//TMenuItem Items[10]; - как объявить в самом классе массив этого же класса?

protected:
	int PosX;
	int PosY;
	string Caption;
};
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 10.01.2012, 16:21   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от t2skler Посмотреть сообщение
как объявить в самом классе массив этого же класса?
Объявить массив указателей на этот класс
Код:
TMenuItem* Items[10];
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 10.01.2012, 17:07   #3
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Мне кажется у вас ошибка в логике, если вы хотите внутри класса сделать массив элементов этого класса вы при инициализации одного элемента должны получить:
Элемент который содержит 10 элементов каждый из которых содержит 10 элементов каждый из которых содержит 10 элементов каждый из которых содержит 10 элементов...
pinkiller вне форума Ответить с цитированием
Старый 10.01.2012, 17:24   #4
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Есть класс TMainMenu в нём объявлен массив TMenuItem, а в TMenuItem объявлен массив TMenuItem, т.е. MainMenu.Items[0].Items[0].Caption, где первый массив Items для главного меню, а второй массив Items для подпунктов.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 10.01.2012, 17:29   #5
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Надо ещё подумать, действительно что-то не то получается
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 11.01.2012, 01:44   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы описали в посту 4 обычный TMenuItem(помоему) от билдера, цель написать свой?
я бы применил std::list.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.01.2012, 04:08   #7
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы описали в посту 4 обычный TMenuItem(помоему) от билдера, цель написать свой?
я бы применил std::list.
Да, свой, но для консоли Жаль я вообще не умею работать с классами в C++. Всё через указатели, а это для меня ужас.

Вот, пожалуйста, объясните мне как осуществить работу с классом. Описан класс:

Код:
class TMyClass { // пункт меню

private:
	int X;

public:
	TMyClass();
	~TMyClass();
	__property int PaddingLeft = {read = X, write = X};
};
Хочется сделать всё по стандартам, т.е. в следующем виде:
Код:
TMyClass *MyClass; // указатель на меню
MyClass->PaddingLeft = 5;
Но это будет не правильно, т.к. я работаю с указателем. Как мне добиться нормальной работы со всеми свойствами и функциями-членами? Выделять память ведь нужно под класс. Вообще ничего не понимаю.
Возможно Я Быдлокодер ©.

Последний раз редактировалось t2skler; 11.01.2012 в 04:29.
t2skler вне форума Ответить с цитированием
Старый 11.01.2012, 04:24   #8
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Память конечно выделить не трудно:
Код:
MyClass = new TMyClass();
Суть в другом. Возможно можно выделить как-то память в конструкторе или же надо делать именно так? А и ещё. При попытке вывести значение PaddingLeft ничего не происходит, хотя если смотреть на переменную X при дебаге, то значение действительно равно 5, но значение не выводится.
Возможно Я Быдлокодер ©.

Последний раз редактировалось t2skler; 11.01.2012 в 04:29.
t2skler вне форума Ответить с цитированием
Старый 11.01.2012, 12:01   #9
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Напиши, если не сложно, именно цель класса, мб смогу чем нибудь помочь.
pinkiller вне форума Ответить с цитированием
Старый 11.01.2012, 14:56   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от t2skler Посмотреть сообщение
Память конечно выделить не трудно:
Код:
MyClass = new TMyClass();
Суть в другом. Возможно можно выделить как-то память в конструкторе или же надо делать именно так? А и ещё. При попытке вывести значение PaddingLeft ничего не происходит, хотя если смотреть на переменную X при дебаге, то значение действительно равно 5, но значение не выводится.
Класс можно построить следующим образом
Код:
class MenuItem
{
	public:
		// default constructor
		MenuItem()
			:_posX(5),
			_posY(5),
			_caption("New caption")
		{
			
		}
		
		MenuItem(int pX, int pY, const std::string &caption) 
			:_posX(pX),
			_posY(pY),
			_caption(caption)
		{
			
		}
		
		//....
		
		int addSubMenu(MenuItem *subMenu) 
		{
			int retVal = -1; // Error: invalid argument
			if(subMenu != NULL) 
			{
				_subMenuItems.push_back(subMenu);
				retVal = 0; // OK
			}
			return retVal;
		}
		
	private:
		int _posX;
		int _posY;
		std::string _caption;
		std::vector< MenuItem * > _subMenuItems;
}
Вы создаете свой элемент меню (корневой)

Код:
MenuItem *rootMenuItem = new MenuItem();
а потом, когда нужно добавить подменю, делаете вот так
Код:
MenuItem *subMenuItem = new MenuItem(10, 10, "Sub menu");
rootMenuItem->addSubMenu(subMenuItem);
Вместо retVal в последнем методе, лучше использовать исключения. Методы рисования реализуйте сами.
MaTBeu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявление объекта класса VCL moongloom C++ Builder 0 02.05.2011 17:16
Использование объектов класса потомка в классе предке Invisible_ Общие вопросы C/C++ 1 05.04.2011 23:40
объявление класса(delphi) MetR Помощь студентам 2 16.03.2010 17:41
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Объявление класса Александр Елис Помощь студентам 2 22.10.2009 21:58