Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с классами

62K
04 сентября 2010 года
jec
8 / / 04.09.2010
всем привет
вот сижу пытаюсь написат нормальный класс но ничего не получается
уже сколько свего перепробовал

вот в чем собственно проблема:

есть некий класс который обробатывает инфу полученную от пользователя и на ее основании делает работу дальше
но мне как то надо сделать что то типа такого:
есть класс я пишу в main (не в классе) функцию
эта функция передаеться методу класса и он с ней работает
я очень долго искал ответ на вопрос и в конце вроде нашел
вот он:
Application.h
 
Код:
class Application
{
     virtual void Loop() {}
};

тоесть как я понял в main должно быть так
main.cpp
 
Код:
Application* pApp = new Application();
pApp->Loop();
    {
        printf("hello\n");
    }


а в другом файле
Application.cpp
Код:
Application::Application()
{
    Loops = true;
}

Application::~Application()
{
}

void Application::Run()
{
    Loops = true;
    while(Loops == true)
    {
        Loop();
    }
}


по идее должно бесконечно много раз написать слово hello
но ничего не происходит
почему-то
программа работает но ничего не выполняется

как исправить?? или каким способом добиться подобного?? в функции Loop будет много сточек позже
и еще виндосовские фишки не предлагайте
2.1K
04 сентября 2010 года
Norgat
452 / / 12.08.2009
аффтар вообще понимает что такое C++ ? судя по коду не особо...

не думаю что поможет, но пример кода:

Код:
[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();
}


хотя тут скорее надо идти и читать книжки умные.

вообщем лучше напиши, что хочешь сделать... всем проще будет.
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
хочу сделать движок
для начало простой и потиху по мере накопления знаний дополнять его
вот и решил что вот так вот начну писать
тут он пока еще ничего не делает

луп это рендер такой
я подсоединяю хидер и пишу всякое в функцию луп что нужно отрисовать и оно должно рисовать
вот
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
только не надо сейчас очень сильно кричать что тут все оч и оч плохо и тд
я его сам придумал, вот и пытаюсь написать, так что тут гениального и супер функционального мало будет
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
нашел фишку одну

 
Код:
void Application::Run()
{
    Loops = true;
    while(Loops == true)
    {
        Loop();
        Loops = false;
    }
}


то тогда все пишется
НО! один раз =(
2.1K
04 сентября 2010 года
Norgat
452 / / 12.08.2009
ладно, промолчу по поводу того, что ты написал выше...
дам только один совет скачай, купи, возьми у друга книжку по С++, скажем Шилдта и прочитай её.

вот тебе пример кода, для размышлений:

Код:
#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();
}
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
книжку стоит всетаки взять, так как код не понял почти совсем =((
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
опа.
сделал так:

 
Код:
int p = 0;
    for(int j = 0; j < 100; j++)
    {
        Loop();
        p += 1;
    }
    printf(" %i", p);


выводит значение 100
тоесть выполняется 100 раз =))
оказывается все работает
62K
04 сентября 2010 года
jec
8 / / 04.09.2010
и еще вопрос собственно по движку
стоит ли так продолжать его писать?? тоесть придерживаться дальше такого вот формата или как то по другому делать?
2.1K
04 сентября 2010 года
Norgat
452 / / 12.08.2009
Цитата: jec
и еще вопрос собственно по движку
стоит ли так продолжать его писать?? тоесть придерживаться дальше такого вот формата или как то по другому делать?



Стоит взять книжку и почитать, а потом решать писать или не писать.
Просто не понимая концепции ООП и её реализации в C++ ничего накодить не получится.
А вы не понимаете толком как работают даже базовые конструкции языка for, while(ну или нету чёткого понимания что и как). Поэтому книжка будет идеальным вариантом, а игра в написание "движка" практикой.
В таком контексте почему бы и не продолжить написание "движка".

3
09 сентября 2010 года
Green
4.8K / / 20.01.2000
Читаем книги!
Тема закрыта.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог