class Application
{
virtual void Loop() {}
};
работа с классами
вот сижу пытаюсь написат нормальный класс но ничего не получается
уже сколько свего перепробовал
вот в чем собственно проблема:
есть некий класс который обробатывает инфу полученную от пользователя и на ее основании делает работу дальше
но мне как то надо сделать что то типа такого:
есть класс я пишу в main (не в классе) функцию
эта функция передаеться методу класса и он с ней работает
я очень долго искал ответ на вопрос и в конце вроде нашел
вот он:
Application.h
Код:
тоесть как я понял в main должно быть так
main.cpp
Код:
Application* pApp = new Application();
pApp->Loop();
{
printf("hello\n");
}
pApp->Loop();
{
printf("hello\n");
}
а в другом файле
Application.cpp
Код:
Application::Application()
{
Loops = true;
}
Application::~Application()
{
}
void Application::Run()
{
Loops = true;
while(Loops == true)
{
Loop();
}
}
{
Loops = true;
}
Application::~Application()
{
}
void Application::Run()
{
Loops = true;
while(Loops == true)
{
Loop();
}
}
по идее должно бесконечно много раз написать слово hello
но ничего не происходит
почему-то
программа работает но ничего не выполняется
как исправить?? или каким способом добиться подобного?? в функции Loop будет много сточек позже
и еще виндосовские фишки не предлагайте
не думаю что поможет, но пример кода:
Код:
[COLOR="blue"]typedef void (*function)(void);[/COLOR]
class Application
{
private:
bool Loops;
[COLOR="blue"]function F;[/COLOR]
public:
Application::Application(function f)
{
Loops = true;
[COLOR="Blue"]F = f;[/COLOR]
}
virtual void Loop() {[COLOR="Blue"]F();[/COLOR]}
void Application::Run()
{
Loops = true;
while(Loops == true)
{
Loop();
}
}
};
void myFunc()
{
printf("hello\n");
}
void main()
{
Application* pApp = new Application([COLOR="blue"]myFunc[/COLOR]);
pApp->[COLOR="blue"]Run[/COLOR]();
_getch();
}
class Application
{
private:
bool Loops;
[COLOR="blue"]function F;[/COLOR]
public:
Application::Application(function f)
{
Loops = true;
[COLOR="Blue"]F = f;[/COLOR]
}
virtual void Loop() {[COLOR="Blue"]F();[/COLOR]}
void Application::Run()
{
Loops = true;
while(Loops == true)
{
Loop();
}
}
};
void myFunc()
{
printf("hello\n");
}
void main()
{
Application* pApp = new Application([COLOR="blue"]myFunc[/COLOR]);
pApp->[COLOR="blue"]Run[/COLOR]();
_getch();
}
хотя тут скорее надо идти и читать книжки умные.
вообщем лучше напиши, что хочешь сделать... всем проще будет.
для начало простой и потиху по мере накопления знаний дополнять его
вот и решил что вот так вот начну писать
тут он пока еще ничего не делает
луп это рендер такой
я подсоединяю хидер и пишу всякое в функцию луп что нужно отрисовать и оно должно рисовать
вот
я его сам придумал, вот и пытаюсь написать, так что тут гениального и супер функционального мало будет
Код:
void Application::Run()
{
Loops = true;
while(Loops == true)
{
Loop();
Loops = false;
}
}
{
Loops = true;
while(Loops == true)
{
Loop();
Loops = false;
}
}
то тогда все пишется
НО! один раз =(
дам только один совет скачай, купи, возьми у друга книжку по С++, скажем Шилдта и прочитай её.
вот тебе пример кода, для размышлений:
Код:
#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
using namespace std;
class MyObject
{
private:
string msdg;
public:
MyObject(string MSDG)
{
msdg = MSDG;
}
virtual void Paint()
{
cout << msdg << endl;
}
};
class MyObject2 : public MyObject
{
public:
MyObject2(string MSDG) : MyObject(MSDG) {}
virtual void Paint()
{
cout << "Hello!!!!!!!!!" << endl;
}
};
class Application
{
private:
vector<MyObject*> objects;
public:
Application(){}
void addObj(MyObject* obj)
{
objects.push_back(obj);
}
void Run()
{
while(true)
{
vector<MyObject*>::iterator I = objects.begin();
while(I!= objects.end())
{
(*I)->Paint();
++I;
}
}
}
~Application()
{
vector<MyObject*>::iterator I = objects.begin();
while(I!= objects.end())
{
delete (*I);
++I;
}
}
};
void main()
{
MyObject* obj1 = new MyObject("Object");
MyObject2* obj2 = new MyObject2("OBJECT");
Application* app = new Application();
app->addObj(obj1);
app->addObj(obj2);
app->Run();
_getch();
}
#include <string>
#include <vector>
#include <conio.h>
using namespace std;
class MyObject
{
private:
string msdg;
public:
MyObject(string MSDG)
{
msdg = MSDG;
}
virtual void Paint()
{
cout << msdg << endl;
}
};
class MyObject2 : public MyObject
{
public:
MyObject2(string MSDG) : MyObject(MSDG) {}
virtual void Paint()
{
cout << "Hello!!!!!!!!!" << endl;
}
};
class Application
{
private:
vector<MyObject*> objects;
public:
Application(){}
void addObj(MyObject* obj)
{
objects.push_back(obj);
}
void Run()
{
while(true)
{
vector<MyObject*>::iterator I = objects.begin();
while(I!= objects.end())
{
(*I)->Paint();
++I;
}
}
}
~Application()
{
vector<MyObject*>::iterator I = objects.begin();
while(I!= objects.end())
{
delete (*I);
++I;
}
}
};
void main()
{
MyObject* obj1 = new MyObject("Object");
MyObject2* obj2 = new MyObject2("OBJECT");
Application* app = new Application();
app->addObj(obj1);
app->addObj(obj2);
app->Run();
_getch();
}
книжку стоит всетаки взять, так как код не понял почти совсем =((
сделал так:
Код:
int p = 0;
for(int j = 0; j < 100; j++)
{
Loop();
p += 1;
}
printf(" %i", p);
for(int j = 0; j < 100; j++)
{
Loop();
p += 1;
}
printf(" %i", p);
выводит значение 100
тоесть выполняется 100 раз =))
оказывается все работает
стоит ли так продолжать его писать?? тоесть придерживаться дальше такого вот формата или как то по другому делать?
Цитата: jec
и еще вопрос собственно по движку
стоит ли так продолжать его писать?? тоесть придерживаться дальше такого вот формата или как то по другому делать?
стоит ли так продолжать его писать?? тоесть придерживаться дальше такого вот формата или как то по другому делать?
Стоит взять книжку и почитать, а потом решать писать или не писать.
Просто не понимая концепции ООП и её реализации в C++ ничего накодить не получится.
А вы не понимаете толком как работают даже базовые конструкции языка for, while(ну или нету чёткого понимания что и как). Поэтому книжка будет идеальным вариантом, а игра в написание "движка" практикой.
В таком контексте почему бы и не продолжить написание "движка".
Тема закрыта.