Форум: Форум C++Разное
Новые темы: 00
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: метод класса
 
 автор: BenderRR   (18.10.2011 в 19:36)   письмо автору
 
 

всем доброго времени суток! есть у меня класс bd, массив элементов этого класса table[n], а вот сам метод:

int copyTable(int a, int b)
        {
                int i,j;
                bd table[n];
                for (a-=1; a<b; a++)
                        table[a]=table[j];
                return 0;
        }


суть метода состоит в том, чтобы заменять элементы bd от а до b элементом table[j].
вызов метода происходит что-то типа:

table[j].copyTable(1,2);


так вот я не понимаю как сопоставить эти table[j], тоесть чтобы при вызове метода таким способом он понимал, что заменять нужно на тот элемент, из-под которого вызывали (если можна так выразиться).

в идеале задание звучит так:
Использование псевдопеременных: bd (3,5) = s, где bd - база данных, s - элемент базы данных, тогда с 3 по 5 элементы базы данных заменить на элемент s.
если кто подскажет как сделать через присваивание буду весьма благодарен

  Ответить  
 
 автор: cheops   (18.10.2011 в 19:41)   письмо автору
 
   для: BenderRR   (18.10.2011 в 19:36)
 

Раз дело происходит в методе, вы всегда можете обратиться к "элементу, из-под которого вызвали" при помощи ссылки this. Или тут в другом дело?

  Ответить  
 
 автор: BenderRR   (18.10.2011 в 19:53)   письмо автору
 
   для: cheops   (18.10.2011 в 19:41)
 

с this не знаком, почитав про него, мне показалось, что это немного не то. но вы правильно поняли, что мне нужно. а можете показать, как именно это применить на моем примере? может я что-то не так понял..

  Ответить  
 
 автор: BenderRR   (18.10.2011 в 22:36)   письмо автору
 
   для: BenderRR   (18.10.2011 в 19:36)
 

вот мне помогли на другом форуме, только без комментов. может кто разберется?

 #include <iostream>
     
    struct StructT;
     
    struct Proxy
    {
        StructT & ref;
        int i;
        int j;
        Proxy(StructT & arg, int a, int b): ref(arg), i(a), j(b)
        {}
     
        StructT & operator= (double arg)
        {
            std::cout << "Proxy (" << i << ", " << j << ")::" << "operator=(" << arg << ")\n";
            return ref;
        }
    };
     
    struct StructT
    {
        Proxy operator()(int i, int j)
        {
            std::cout << "operator()(" << i << ", " << j << ")\n";
            return Proxy(*this, i, j);
        }
    };
     
    int main()
    {
        StructT bd;
        bd(3,5) = .5;
        return 0;
    }

  Ответить  
 
 автор: cheops   (19.10.2011 в 10:13)   письмо автору
 
   для: BenderRR   (18.10.2011 в 22:36)
 

Вам предложили перезагрузить оператор = и оператор круглые скобки (), в C++ операторам можно назначить свои собственные действия. Кстати, заметьте
 return Proxy(*this, i, j);
пришлось использовать ссылку this на текущий объект структуры StructT, разименовав её при помощи *. Без this никак не обойтись, когда вам нужно обратиться к текущему объекту.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования