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

Ваш аккаунт

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

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

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

Не могу понять operator[](С++)

18K
29 марта 2007 года
Maniac.by
19 / / 20.03.2007
Вот задачка:

1. Разработать класс А, одной из компонент которого является символьная строка и класс В, одним из методов которого является функция, выполняю-щая вывод на экран слова минимальной длинны символьной строки объекта класса А.(Решил, спасибо что помогли!:) )

2. Для созданного объекта a, разработанного класса – символьная строка, реализовать перегрузку операции []. Содержимое объекта (a, его строки) вы-вести на экран.(не пойму как реализовать перегрузку операции []...я должен строку возвратить или сам обьект?)
Вот код:
Код:
#include <iostream>
#include <conio.h>

using namespace std;

class AClass
{
private:
    char *m_string;

public:
    AClass() { m_string = new char[80]; }
    ~AClass() { delete []m_string; }
    void In();
    char* Out() const { return m_string; }
    char* operator[] ();
};
//------------------------------------------------------------------------ 
class BClass
{
public:
    BClass() {};
    ~BClass() {};
    void OutMinStr(char*);
};
//------------------------------------------------------------------------ 
void AClass::In()
{
    cout << "Enter a string: ";
    gets(m_string);
    cout << "---------------";
}
//------------------------------------------------------------------------
char* AClass::operator[] ()
{
    return m_string;
}
//------------------------------------------------------------------------
/*вывод на экран слова минимальной длинны
 символьной строки объекта класса АClass*/
void BClass::OutMinStr(char* string)
{
    for (int i = 0; string == 32; i++); //начало 1-го слова
    for (int q = i; string[q] != 32; q++); //конец 1-го слова
    int min1 = q - i; //хранит длину min слова
    int p = i; //указывает на 1 символ слова min длины
       
    for (i = p + min1; string; i++)
    {
        if (string != 32)
        {
            for (int q = i; string[q] != 32; q++);
            int min2 = q - i;
            //Отсеивание min слова
            if (min1 > min2)
            {
                min1 = min2;
                p = i; //указывает на 1 символ слова min длины
            }
            i = q;
        }
    }
    //вывод слова min длины
    cout << "Slovo min dlini: ";
    for ( ; string != 32; p++)
        cout << string;
}
//------------------------------------------------------------------------ 
int main()
{
    AClass oA;
    BClass oB;
    oA.In();
    cout << endl;
    cout << "String: " << oA.Out() << endl;
    oB.OutMinStr(oA.Out());
    cout << "operator[]: " << oA[] << endl;

    cout << endl << endl;
    cout << "Press any key..." << endl;
    while(!_kbhit());
    return 0;
}

Вот еще:
 
Код:
char* AClass::operator[] () /*что передавать? неужто char* st а потом с strcpy работать...вобщем незнаю..инфы мало очень по оператору []*/
{
    return m_string; //типо как и ф-ция Out() работать должна??
}


p/s дико извиняюсь..задачки легкие...просто дали мало времени на изучение языка+самому учить тяжело..я на заочке...
9
29 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Не очень понятно. Тебе нужно посредством индексного оператора [] вывести строку целиком? Интересное применение... :)
Может быть, надо вывести какой-либо символ строки? Если да, то:
 
Код:
char AClass::operator[]( int index )
{
    return *(m_string + index);
}

// пример
AClass oA;
...
cout << oA[5] << endl;

не то?
18K
29 марта 2007 года
Maniac.by
19 / / 20.03.2007
Вот и я, что то не понял что требуется...
обычно работают с элементами массива..тобишь..аргумент - элемент массива..а не весь масив
Да и спасибо большое, хот что то...будем думать!!!:)
18K
29 марта 2007 года
Maniac.by
19 / / 20.03.2007
А как на счет:
 
Код:
char AClass::operator[]( int index )
{
    return *(m_string + index);
}
 - - - - -
  for (int i=0; oA; i++)
  {
       cout << "operator[" << i << "]: " << oA << endl;
  }

Мот так надо?;)
9
29 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: Maniac.by

Мот так надо?;)


Ну, это тебе видней. Главное, ты разобрался с перегрузкой operator[] ;)

18K
29 марта 2007 года
Maniac.by
19 / / 20.03.2007
Вроде понял:) Спасибо за помощь Lerkin!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог