Чисто виртуальная функция без тела не должна быть вызвана никогда. Это теоретически. Но при очень большом желании ее таки можно вызвать.
В случае чисто виртуальной функции с телом, все несколько проще, я об этом писала.
Ну а если тела нет, то можно сделать так.class A
дальше осталось где-нибудь вызвать
{
public:
A()
{func(this);};
virtual void pureVirtual()=0;
};
class B : public A
{
public:
virtual void pureVirtual(){};
};
void func(A* pA)
{
pA->pureVirtual();
}
new B;
Поведение компилятора в данном случае не определено (undefined). Но большинство компиляторов скажут в рантайме "pure virtual function call".
Вообще не рекомендуется передавать this из конструктора или деструктора в качестве параметра.
Только не спрашивайте "А зачем это нужно?" :-)
воскресенье, мая 22, 2005
Как вызвать чисто виртуальную функцию без тела
Категории: cpp
пятница, мая 20, 2005
История Чайника
В компьютерной графике в качестве объекта для тестов часто используется чайник.
Наравне с Create Sphere и Create Box в DirectX и в OpenGL встроена функция Create Teapot. Почему именно чайник и что это за чайник такой?
Вот он, Тот Самый Чайник, герой моего рассказа:
Это чайник Мартина Ньюэлла (Martin Newell) и его жены Сандры, он был сделан в 1974 году. Мартину нужны были интересные трехмерные модели, жена предложила ему смоделировать чайный сервиз. Он тут же схватился за карандаш и начал рисовать модель. Позже, на работе, он вручную проставил нужные контрольные точки для кривых Безье. Он сделал не только модель чайника, но и модели ложки и чашки. Вот они Те Самые Модели.
Если сравнить картинки настоящего Чайника и смоделированного на компьютере, то видно, что настоящий несколько выше. На самом деле он выше на 30%. А все потому, что одним из первых пользователей чайника был Джим Блинн (Jim Blinn), и он работал с ним на системе с неквадратными пикселами и Джиму пришлось слегка изменить модель. Он разделил Z координату на 1.3. Его вариант модели получил наибольшее распространение.
Почему именно чайник получил такое распространение? Ну во-первых, тогда было не так много свободно распространяемых 3Д моделей. Во-вторых, чайник оказался очень удобным объектом для тестирования. Он узнаваем, у него сложная топология, есть самозатенение, скрытые поверхности, и вогнутые, и выпуклые поверхности, седловые точки. Сам файл чайника по объему занимает не так много места.
Интересные факты из жизни Чайника
- У изначальной модели нет дна! Существуют различные варианты модели чайника, где дно есть, но это все самодеятельность.
- Джим Арво (Jim Arvo) и Дэйв Кирк (Dave Kirk) в своей работе на тему трассировки лучей в качестве иллюстрации использовали картинку с изображением шести колонн. На пяти из них лежат платоновы тела (тетраэдр, куб, октаэдр, додекаэдр, икосаэдр), а на шестой чайник. Картинка называлась "Шесть платоновых тел". После этого чайник стали называть чайникаэдром (teapotahedron).
- Мартин Ньюэлл как-то упомянул, что, насмотря на то, что у него много работ по трехмерной графике, люди его запомнять только за "этот проклятый чайник".
- Чайник использовался в мультфильме Toy Story, в одно из сцен герои пью из него чай.
- На свете существует много ненастоящих чайников. Будьте бдительны!
- Сейчас Чайник находится в Компьютерном Историческом Музее.
По мотивам A Brief History of The Utah Teapot by Steve Baker.
Категории: gamedev
четверг, мая 12, 2005
Перепрограммирование Aibo
Первая мысль, которая возникла у меня, когда я узнала, что Sony выпускает в продажу робота-собаку Aibo была: "а можно ли ее перепрограммировать?". Я порылась в Интернете, но тогда ничего не нашла.
Недавно мне попалась на глаза статья о том, что в очередных соревнованиях по футболу среди роботов активно используют перепрограммированных Aibo. И я решила снова поискать чего-нибудь по этому поводу. Да, информации сильно поприбавилось. Дело в том, что поначалу Sony почему-то очень противилась перепрограммированию ее собачек и даже закрыла сайт, на котором было подробно описано как хачить AiboPets (их же много всяких). В 2002 году, однако, наступило просветление и Sony теперь всячески эту затею поддерживает, выложила SDK, открыла обратно AiboHack.
На данный момент Sony Aibo - это очень удобная платформа для программирования роботов. Потому что прежде чем робота программировать, его вообще придется собрать. А тут все уже есть готовое, пользуйся. Сравнительно дешево - всего каких-то 2000 долларов. У Sony есть скидки для вузов. Можно еще попробовать подержанную купить. Вон на Молотке за 1000 продают. Да... Хм... Сглатываем слюну и едем дальше...
Aibo работает под управлением операционной системы по имени Aperios. Программы под нее можно писать на AIBO SDE, которая состоит из нескольких SDK. Наиболее интересна их них OPEN-R SDK, потому что она дает полный контроль над собакой. Все остальное - вариации на тему стандартных функций и движений. В Sony, кстати, приложения для Aibo разрабатываются на чем-то другом, о чем они таинственно упоминают в FAQ'е. Они даже не признаются какой компилятор используют. Соответственно исходников программ, поставляемых с Aibo тоже нет.
Смотреть чтобы собака не перегрелась или чего-нибудь себе не сломала придется самостоятельно, почему-то никаких предохранителей у нее нет :-(. Программы заливаются на AIBO Programming Memory Stick, есть возможность доступа через wireless LAN.
Есть некий Remote Processing OPEN-R, который позволяет запускать OPEN-R программу не на Aibo, а на обычном компьютере. Вот это интересно, надо будет поподробнее посмотреть что оно умеет.
В основе OPEN-R используется понятие объекта, но объекты эти не такие, к каким все привыкли в C++. Каждый объект работает в чем-то похожем на Юниксовые потоки. Каждому объекту свой поток, все они работают параллельно и обмениваются между собой сообщениями. У каждого объекта есть набор состояний, в котором он может находиться. Объект не может находиться в двух состояниях одновременно. Когда приходит какое-либо сообщение, объект может свое состояние поменять. Конечный автомат, короче.
Можно получать информацию с сенсоров, с микрофонов, с камеры. Есть встроенный быстрый хардварный алгоритм распознавания цвета.
Язык программирования C++, компилять это все предлагается исключительно gcc, в Windows нужен Cygwin, соответственно. Памяти мало, 64 Мб в последней на настоящий момент модели (ERS-7), процессор у нее 576Мгц.
Большой популярностью пользуется Sony Four-Legged Robot League, где народ пытается научить Aibo играть в футбол. А ведь ее можно научить действительно полезным вещам. *Мечатательно* полы мыть, капусту шинковать...
Ни у кого лишняя Aibo не завалялась, кстати?
Ссылки по теме:
AIBO SDE
OPENR Tutorial
Tekkotsu development Framework for Aibo Robots
RoboCup Цель этого проекта: обыграть человека в футбол до 2050 года.
Sony Four-Legged Robot League
Категории: programming, robots
среда, мая 11, 2005
Статьи Алистэра Коуберна по управлению группой разработчиков
Алистэр Коуберн на основе своего богатого опыта в разработке ПО рассказывает какие проблемы возникали у него в различных проектах на различных этапах и какие он из них сделал выводы. Написано несколько академично, веселый и живой стиль повествования Джоэла Спольски мне нравится гораздо больше, но почитать все равно было интересно.
Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения
Каждому проекту своя методология
Категории: programming
