Метод Класса

Тема в разделе "C/C++/C#", создана пользователем BenderRR, 18 окт 2011.

Статус темы:
Закрыта.
  1. BenderRR

    BenderRR Гость

    всем доброго времени суток! есть у меня класс bd, массив элементов этого класса table[n], а вот сам метод:
    Код (C++):
            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].
    вызов метода происходит что-то типа:
    Код (C++):
    table[j].copyTable(1,2);
    так вот я не понимаю как сопоставить эти table[j], тоесть чтобы при вызове метода таким способом он понимал, что заменять нужно на тот элемент, из-под которого вызывали (если можна так выразиться).

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

    BenderRR Гость

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

    Код (C++):
     #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;
    }
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Вы скажите какие именно строки не понятны.
    А так...тут 2 структуры, в Прокси перегружен конструктор и оператор "=", в StructT перегружен оператор ()
    вот тут:
    Код (Text):
    bd(3,5) = .5;
    сначала выполнится часть левее оператора =, при этом выполнится следующий код:
    Код (Text):
     Proxy operator()(int i, int j)
    {
    std::cout << "operator()(" << i << ", " << j << ")\n";
    return Proxy(*this, i, j);
    }
    тут что-то выводится на экран и возвращается экземпляр структуры прокси(вызывается конструктор с тремя параметрами), а выполнится этот код:
    Код (Text):
    Proxy(StructT & arg, int a, int b): ref(arg), i(a), j(b)
    {}
    тут по очереди вызываются конструкторы каждого поля структуры - можно было написать ref = arg внутри {} вместо ref(arg) и т.п.

    Дак вот экземпляр прокси создается и возвращается оператором () структуры StructT - теперь получена левая часть выражения bd(3,5) = .5;

    правая часть - это число типа double, а левая - экземпляр прокси, между ними оператор =, который и выполняется:
    Код (Text):
     StructT & operator= (double arg)
    {
    std::cout << "Proxy (" << i << ", " << j << ")::" << "operator=(" << arg << ")\n";
    return ref;
    }
    догадаетесь сами что он делает :)

    ЗЫ. А код написан так, чтобы препод смог вас завалить. Автор кода - молодец. Даже после моих комментов тут есть на чем валить :blush:
     
Загрузка...
Похожие Темы - Метод Класса
  1. Sander
    Ответов:
    1
    Просмотров:
    510
  2. facefull
    Ответов:
    4
    Просмотров:
    1.001
  3. fedotxxl
    Ответов:
    6
    Просмотров:
    3.394
  4. DeuS7
    Ответов:
    0
    Просмотров:
    92
  5. rrrFer
    Ответов:
    0
    Просмотров:
    319
Статус темы:
Закрыта.

Поделиться этой страницей