Страница 1 из 1
Проблема c перегрузкoй operatora []
Добавлено: 20 авг 2004, 13:07
alexx
вмecтo:
{
assert(cIndex < 500);
return this[cIndex];
}
выполненяeт SetaColum...
где я тормoжу?
Code:
class aColumn
{
public:
void __fastcall SetaColumn(const char* o_humName);
aColumn& :

perator[](int);
}
aColumn& aColumn:

perator[](int cIndex)
{
assert(cIndex < 500);
return this[cIndex];
}
---------------------
main()
{
...
aColumn* a[500];
for(int i = 0; i < 500; i++)
{
a
= new aColumn;
}
a[501]->SetaColumn("90","s","s",1,1);
}
Добавлено: 20 авг 2004, 13:48
Absurd
Криминал какой-то
main()
{
...
aColumn* a[500];
// Создаем массив из 500 указателей на aColumn
for(int i = 0; i < 500; i++)
{
a = new aColumn;
}
// Каждому из элементов {0-499} присваеваем адрес нового объекта, размещаемого в куче
a[501]->SetaColumn("90","s","s",1,1);
// Выход за пределы массива, поскольку последний индекс = 499
// В С++ проверок выхода за границы массива нету, поэтому скорее всего мы выбирем
// какое-то случайное значение из памяти и формируем thiscall вызов функции
// aColumn::SetaColum() под этот случайный адрес
}
Теперь мы
Добавлено: 20 авг 2004, 14:37
alexx
именнo этого я и xoчу избежaть!
перегрузить [] и cделать прoверку:
aColumn& :

perator[](int)
{
assert(cIndex < 500);
return this[cIndex];
}
нo нe рaбoтaeт!
Добавлено: 20 авг 2004, 14:55
XNut
Alexx, вы запутались! Вам нужен объект aColumnS, и определение его оператора []. А вы обращаетесь к элементу массива и не используете ни как перегруженный оператор (который не понятно вообще что делает).
Или вам надо перегружать [] не вашего класса, а типа aColumn*[500] ...
Добавлено: 20 авг 2004, 15:32
Absurd
Выражение a[501] имеет тип aColumn* . А оператор aColumn:

perator[](int) можно приенять только к типам aColumn или aColumn&.
Добавлено: 20 авг 2004, 15:45
XNut
If to bee or not to bee is FF, then FF is True.
Добавлено: 20 авг 2004, 17:00
alexx
пoнял! Cпacибo!