• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Метод Класса

  • Автор темы BenderRR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

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.
если кто подскажет как сделать через присваивание буду весьма благодарен
 
B

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;
}
 
R

rrrFer

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

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

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

ЗЫ. А код написан так, чтобы препод смог вас завалить. Автор кода - молодец. Даже после моих комментов тут есть на чем валить :blush:
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!