Хай! Сразу к делу Опять с самопальным движком трабла... Есть класс, в котором перегружен оператор индексации. Все отлично когда работа производится с обычной переменной, но вот когда объект инициализирован в динамической памяти (то есть когда работаю с указателем на объект), не фурычит. Вот пример ситуации:
class MyClass
{
public:
//Ctors and Dtor
int& operator[](int pos);
private:
int cVar[100];
};
int& MyClass::operator[](int position)
{
//Check for validity of requested element
if( (position >= 0) && (position < 100) )
return cVar[position];
}
int main()
{
//Init
MyClass* obj = new MyClass;
int value = obj[7]; //etc...
//Clean up
delete obj;
obj = NULL;
return 0;
}
Компилятор ругается фразочкой что "невозможно преобразовать тип MyClass* в int". Как же тогда получить доступ к членам объекта через оператор индексации?? Ну кроме альтернативы написать аналогичную функцию типа Get(position)...
Точно Спасибо большое, перечитал пол-учебника по С++, но все-таки не нашел инфу... Проблема вроде решена. А как дело обстоит с операторами + / = ++i i++ и т.п?
Точно Спасибо большое, перечитал пол-учебника по С++, но все-таки не нашел инфу... Проблема вроде решена. А как дело обстоит с операторами + / = ++i i++ и т.п?
{
MyClass mc;
int a = mc.at(3);
int b = mc.operator [](3);
int b = mc [3];
}
{
MyClass* p_mc = new MyClass();
int a = p_mc->at(3);
int a = (* p_mc).at(3);
int b = p_mc->operator [](3);
int b = (* p_mc).operator [](3);
int b = (* p_mc) [3];
}
Точно Спасибо большое, перечитал пол-учебника по С++, но все-таки не нашел инфу... Проблема вроде решена. А как дело обстоит с операторами + / = ++i i++ и т.п?
Все это очень хорошо разъяснено в книжке "Объектно-ориентированное программирование на С++" Лафоре
Вот я как раз ее и читаю Но там сперва идут темы насчет перегрузки операторов, а потом уже про указатели... Так что комбинации юзанья указателей на объекты с перегруженными операторами вроде не описаны. В общем спасибо за разъяснение, работа над движком продолжается
Да пишу тут в свободное время игровой движок. Дизайн-лист более-менее такой:
Движок для 2D игр с выводом графики через OpenGL (для высокой производительности), с чистыми и понятным интерфесом. Звук через OpenAL, скриптовая система для Lua, мэнеджер сцены, ресурсов и управления... Все это в "минималистическом" стиле, то есть никакие там функциональности для специфических типов игр. Как прослойка между системой и движком используется SDL, потому-что думаю написать как кросс-платформенный. Из форматов думаю впаять поддержку BMP и PNG (для графики) и vorbis (как контейнер естественно ogg) для звука. В общем буду считать движок полноценным когда на нем будет возможно написать игры Тетрис, Понг, ПакМан и какое-то подобие бродилки вроде SuperTux.
Да пишу тут в свободное время игровой движок. Дизайн-лист более-менее такой:
Движок для 2D игр с выводом графики через OpenGL (для высокой производительности), с чистыми и понятным интерфесом. Звук через OpenAL, скриптовая система для Lua, мэнеджер сцены, ресурсов и управления... Все это в "минималистическом" стиле, то есть никакие там функциональности для специфических типов игр. Как прослойка между системой и движком используется SDL, потому-что думаю написать как кросс-платформенный. Из форматов думаю впаять поддержку BMP и PNG (для графики) и vorbis (как контейнер естественно ogg) для звука. В общем буду считать движок полноценным когда на нем будет возможно написать игры Тетрис, Понг
Сложно будет такое написать не зная указателей... А вообще удачи
Это и так одно и то же ;) По крайней мере так Лафоре говорит.
это не одно и тоже. Например можно сделать указатель на указатель, массив указателей и указатель на массив. Но как сделать массив массивов? Массив, это просто место в памяти для нескольких одинаковых элементов, можно узнать сколько их(sizeof(m)/sizeof(m[0])). В массиве есть хотябы один элемент, указатель может указавать на что угодно, в т.ч. и на NULL. В функцию нельзя передать массив(например попробуйте передать, и внутри вычислить размер - получилось?)