Автор Тема: си плюс плюс  (Прочитано 759 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LanuHum

  • Житель
си плюс плюс
« : 30 Октября 2016, 20:17:55 »
Блин, уже ни столько узнать хочется, сколько поматериться.
И Шилдта букварь лежит, и интернет под боком...
Наследование. Я его родственник. Спроси кого, скажут, учи букварь.
Класс "объект", его потомки: "меш", "кривая". Меши и кривые нужно вогнать в один массив, что ни так страшно, как потом их оттуда извлечь.
Примеры есть, но в рендерерах... ни фига не выковыряю.
Да уж, а так хорошо всё начиналось.

Я это, конечно, в курилке мог написать, но решил положить начало теме по программированию на С++  :)

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: си плюс плюс
« Ответ #1 : 30 Октября 2016, 20:21:22 »
Ух ты ж :) Классная тема! :) .
...и всё ясно, но ни хрена не понятно , как обычно :)

¯\_(ツ)_/¯

Оффлайн mr.A

  • Житель
Re: си плюс плюс
« Ответ #2 : 30 Октября 2016, 20:26:34 »
Мне казалось ты разобрался http://blender-3d.ru/forum/index.php/topic,1239.0.html
А! То был С без ++?

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #3 : 30 Октября 2016, 20:30:55 »
Мне казалось ты разобрался http://blender-3d.ru/forum/index.php/topic,1239.0.html
А! То был С без ++?

Да, то было без плюсов. Проконсультируешь?

Оффлайн mr.A

  • Житель
Re: си плюс плюс
« Ответ #4 : 30 Октября 2016, 20:35:59 »
Скорее нет, чем да. У меня слабые знания. Но кто мешает написать сюда вопрос? Ответ найдется.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: си плюс плюс
« Ответ #5 : 30 Октября 2016, 20:37:11 »
... можешь хранить в массиве как тип "объект" извлекать как "объект", но сделать у класса "объект" наследуемую функцию  get_type , которая возвращает у каждого потомка свой код ("меш", "кривая") ...
... и далее делать приведение типа к нужному классу в зависимости от значения этой функции ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #6 : 30 Октября 2016, 20:54:34 »
... можешь хранить в массиве как тип "объект" извлекать как "объект", но сделать у класса "объект" наследуемую функцию  get_type , которая возвращает у каждого потомка свой код ("меш", "кривая") ...
... и далее делать приведение типа к нужному классу в зависимости от значения этой функции ...
В этом коде всё правильно?
// .h

class BlenderScene{
    public:
        std::map<std::string,BlenderObject*>    objects;
        BlenderScene();
        ~BlenderScene();
        void addObject(std::string name,BlenderMesh* mesh);
};

class BlenderObject{
    public:
        int Type;
        BlenderObject();
        ~BlenderObject();
};

class BlenderMesh : public BlenderObject{
    public:
        std::string name;
        BlenderMesh();
        ~BlenderMesh();
};


// .cpp

BlenderScene::BlenderScene(){}
BlenderScene::~BlenderScene(){}
BlenderScene::BlenderObject(){}
BlenderScene::~BlenderObject(){}
BlenderScene::BlenderMesh(){}
BlenderScene::~BlenderMesh(){}

void BlenderScene::addObject(std::string name,BlenderMesh* mesh){
    objects.insert ( pair<std::string,BlenderMesh*>(name,mesh) );
}

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: си плюс плюс
« Ответ #7 : 30 Октября 2016, 21:23:54 »
... этот код не демонстрирует твоей проблемы и не решает её ...

... почему добавляя объект ты ссылаешься на меш? ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #8 : 30 Октября 2016, 21:45:09 »
... этот код не демонстрирует твоей проблемы и не решает её ...

... почему добавляя объект ты ссылаешься на меш? ...
Ну, я начал по-порядку. И, у тебя уже есть вопросы. И у меня. Это мне как раз, и не очень-то понятно.
Допустим, у меня есть данные для меша, в данном случае имя. Что мне делать? Я делаю так:
BlenderMesh *mesh = new BlenderMesh();
mesh -> name = obname;
Так как меш наследник объекта, я и пишу его в map, как объект... понимаю, что, скорее всего, это неверно, и это первый повод материться.
Как мне превратить меш в объект?

Оффлайн Striver

  • Житель
    • http://striver00.ru
Re: си плюс плюс
« Ответ #9 : 30 Октября 2016, 21:51:36 »
Например, так
BlenderObject *mesh = new BlenderMesh();

Оффлайн Striver

  • Житель
    • http://striver00.ru
Re: си плюс плюс
« Ответ #10 : 30 Октября 2016, 21:55:48 »
Цитировать
Класс "объект", его потомки: "меш", "кривая". Меши и кривые нужно вогнать в один массив, что ни так страшно, как потом их оттуда извлечь.
Вот из-за подобной хрени меня бесят языки со статической типизацией... В питоне такой проблемы нет, и можно даже иерархии классов не строить.

Оффлайн mr.A

  • Житель
Re: си плюс плюс
« Ответ #11 : 30 Октября 2016, 21:56:01 »
Не конпеляется. Пиши еще  :P . А если серьезно, то даже в твоем простом коде я уже ноги сломал. Объясни словами, что от чего хочешь наследовать или что там? Может и я пойму что.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: си плюс плюс
« Ответ #12 : 30 Октября 2016, 21:57:56 »
>> и пишу его в map, как объект
... только добавлять нужно void addObject(std::string name,BlenderObject* ob) ...

BlenderMesh *mesh = new BlenderMesh();
mesh -> name = obname;
scene->addObject(name,mesh)

... если вызов addObject(name,mesh) не прокатит, пробуй addObject(name, (BlenderObject*) mesh) ...
... при этом name у тебя есть в объекте и name будет в списке? ...

... после того как получишь из списка BlenderObject* можешь сделать mesh=(BlenderMesh*) object ...


... сделай еще в BlenderObject наследуюмую функцию get_type которая возвращает код типа объекта ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #13 : 30 Октября 2016, 21:58:21 »
Например, так
BlenderObject *mesh = new BlenderMesh();
Пытался:
 error: 'class povanim::BlenderObject' has no member named 'name'

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: си плюс плюс
« Ответ #14 : 30 Октября 2016, 22:00:50 »
а так?
BlenderObject *mesh = (BlenderObject*) new BlenderMesh();
Для Кота

 

* По форуму

* Последние вложения

Sizes.jpg
Скачано: 9
Автор: Dmi3ryd
paticles.jpg
Скачано: 5
Автор: Dmi3ryd
Снимок 1.PNG
Скачано: 3
Автор: atmk
Снимок.PNG
Скачано: 3
Автор: atmk
Screw.jpg
Скачано: 8
Автор: Dmi3ryd