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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2011, 14:04   #1
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
Вопрос Update() 4my ChildNodes

не пойму почему метод update root'a выполняется только для него... хотя должен по идее и для всех его узлов? где и чего я пропустил?

Код:
#include <iostream>
#include "..\\src\\CBaseObject.h"


int main() 
{

	CBaseObject *root = new CBaseObject("root");
	CBaseObject *node1 = new CBaseObject("node1");

	root->AddChild(node1);
	root->Update();

	root->Release();
	

	system("pause");

}
Код:
#include <string>

#include <vector>
using std::vector;
using std::string;

#include "iostream"
using std::cout;
using std::endl;

class CBaseObject 
{
public:
	CBaseObject( std::string newname ) { name = newname; cout << name << " CBaseObject()\n";};
	virtual ~CBaseObject() { cout << name << " ~CBaseObject()\n"; Destroy(); };

	void Release() { cout << name << " Release()\n";delete this; }; 

	virtual void Update() 
	{ 
		for( std::vector<CBaseObject*>::iterator i = m_lstChildren.begin(); i != m_lstChildren.end(); i++ ) 
		{ 
			cout << name << " Update()\n";
			(*i)->Update(); 
		} 
	}
	
	void Destroy() 
	{ 
		for( std::vector<CBaseObject*>::iterator i = m_lstChildren.begin(); i != m_lstChildren.end(); i++ ) 
		{
			cout << name << " Destroy()\n";
			(*i)->Release(); 
		}
		
		m_lstChildren.clear(); 
	} 

	void AddChild( CBaseObject* pNode ) 
	{
		cout << name << " AddChild()\n";
		m_lstChildren.push_back(pNode); 
	}

protected: 
	std::vector<CBaseObject*> m_lstChildren;
	std::string name;
};
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Старый 07.01.2011, 14:57   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
cout << name << " Update()\n";
выводим имя себя любимого

Код:
(*i)->Update();
апдейт вызываем у нода. У нода нет детей, вот он и молчит, хотя апдейт реально у него вызывается.

Нуно или добавить (*i)-> перед name, или вынести cout за цикл.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 07.01.2011 в 15:03.
veniside вне форума Ответить с цитированием
Старый 07.01.2011, 15:06   #3
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
По умолчанию

спасибо, veniside

разобрался теперь все работает, неправильный дебаг-оут как оказывает сделал, заменил на...
Код:
	virtual void Update() 
	{ 
		for( std::vector<CBaseObject*>::iterator i = m_lstChildren.begin(); i != m_lstChildren.end(); ++i ) 
		{ 
			cout << (*i)->name << " Update()\n"; // проблема была тут 
			(*i)->Update(); 
		} 
	}
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Старый 07.01.2011, 17:30   #4
c++ learner
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 38
По умолчанию

Набросал в общих чертах следующее… и в связи с чем хотел бы узнать чем должны еще обладать объекты, описанные мной в этом коде?

Камера, Геометрический объект, Источник света.

Может иерархия не правильная, они имеют право находиться на одном уровне абстрагирования от базового объекта?

Какие еще методы или ф-ии стоит добавить к каждому из них или в базовый?
Может еще создать на их основе новые объекты, тогда какие?
Код:
#pragma once
namespace CObjects
{
	class CBaseObject;
	class CCameraObject;
	class CGeometryObject;
	class CLightObject;

	/*
	*	Базовый объект для всей иерархии обьектов
	*/
	class CBaseObject 
	{
	public:
		/*	Конструктор базового обьекта по умолчанию*/
		CBaseObject();
		
		/* Конструктор базового обьекта с параметром */
		CBaseObject( std::string newname );
		
		/* Метод: Обновление в узлах  */
		virtual void Update();
		
		/* Метод: Добавить узел	*/
		void AddChild( CBaseObject* pNode );
		
		/*	Метод : Удаление объекта и всех его узлов */
		void Release();
		
		/*	Метод: Удаление всех узлов */
		void Destroy();
		
		/* Деструктор базового объекта */
		virtual ~CBaseObject();

	protected: 
		/* Вектор со списком узлов */
		std::vector<CBaseObject*> m_lstChildren;
		
		/* Имя объекта*/
		std::string name;
	};

	/*
	*	Класс камеры
	*/
	class CCameraObject : public CBaseObject 
	{
	public:
		/* Конструктор камеры по-умолчанию */
		CCameraObject();
		/* Метод: Обновление камеры*/
		void Update();
		/* Деструктор камеры*/
		~CCameraObject();
	};

	/*
	*	Класс геометрического объекта
	*/
	class CGeometryObject : public CBaseObject 
	{
	public:
		/* Конструктор геометрического объекта по-умолчанию*/
		CGeometryObject();
		/* Метод: Обновление геометрического объекта */
		void Update();
		/* Деструктор геометрического объекта */
		~CGeometryObject();
	};
	
	/*
	*	Класс источника света
	*/
	class CLightObject : public CBaseObject 
	{
	public:
		/* Конструктор источника света*/
		CLightObject();

		/* Метод: Обновление источника света*/
		void Update();
		
		/*Деструктор источника света*/
		~CLightObject();
	};

}
Вложения
Тип файла: zip Project1.zip (4.3 Кб, 6 просмотров)
"...в самом начале было слово.." т.е. 16-битное битовое поле.
c++ learner вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Update usmesn PHP 3 02.06.2010 17:23
directorylistbox1.update; Leo20 Общие вопросы Delphi 2 13.12.2009 14:09
update shad0w SQL, базы данных 3 27.10.2009 11:44
Delete и Update crit БД в Delphi 58 18.05.2009 20:49
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44