Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.
На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.
Это не допустимо, можно получить доступ только к protected и public.
Можно сделать вот так:
C++:
#include <iostream>
using namespace std;
class A {
friend class B;
private:
int a;
};
class B : public A
{
public:
void test() {
A a;
a.a = 10;
cout << a.a << endl;
}
};
int main()
{
B x;
x.test();
return 0;
}
это не совсем то что ты хотел, тут доступ к private-члену осуществляется посредством объявления класса B дружественным.
просто вот что именно меня интересует. Есть такого рода задача : реализация паттерна Посредник. К примеру, есть 4 класса -> User, Mediator, ClassA, ClassB. Обьект User принимает строку. И мне нужно эту строку, которую получил обьект User передать в ClassA, ClassBпосредством класса Mediator. По идее же, паттерн посредник подразумевает наслевоние.. Задачу эту я сделал, но чуть схитрив, а так не интересно.
Собственно, вот программа.
Здесь при создании обьекта User происходит вызов обьекта Mediator и передача ему указателя на строку( ну или же строки, чтобы понятней было). Конструктор класса Mediator в свою очередь вызывает конструктор класса ClassA, и через указатель передает в него строку, полученную классом Mediator, и здесь же происходит передача этой строки в класс B, но посредством использования композиции...А это вроде не круто как - то )) Вот такие дела..
А как сделать так, чтобы композицию заменить наследованием, я ума не приложу. Если пронаследовать классом claasB класс Mediator, то происходить ошибка, в которой говорится, что невозможно определить базовый класс ((
1.Получить значение можно при помощи public метода, например.
C++:
class A{
/...
public:
int getVar();
private:
int var;
//...
};
int A ::getVar() {
return var;
}
calss B: public A {
//...
};
В примере для того, чтобы "получить значение private - переменной базового класса" класса B(базовый А) нужно вызвать метод getVar().
2. Если нужен полноценный доступ к полю базового класса - используй protected.
3. Вариант лазибиз тоже выход, но дружбу я бы не использовал. С некоторых точек зрения она нарушает принцип инкапсуляции(в словесных баталиях на эту тему я участвовать не буду), хотя иногда без нее не обойтись(но вряд-ли это ваш случай).
#include <iostream>
using namespace std;
class A {
protected:
int x;
};
class B : public A {
public:
B( int v ) { x = v; }
void print() {
cout << x << endl;
}
};
int main()
{
B b( 123 );
b.print();
return 0;
}
Товарищи, почему же ни кто не хочет прочитать второй пост и вникнуть в суть поставленной задачи... Смотрите, что нужно организовать:
1) Явно создать и инициализировать объект класса User.
2) Получить значение обьекта User и сохранить в классе MEdiator - посредник.
3) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classA
4) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classB
Я согласен, что не обязательно использовать private, но меня интересует, как реализовать выше перечисленные пункты при явной инициализации только обьекта User. Получится ли получить значение переменной из класса User в класс Mediator и последующие, если не создается явно обьекты последних, а в этих классах описан только процесс доступа к соответствующим переменным???
#include <iostream>
using namespace std;
class User {
friend class Mediator;
public:
User( int v ) { x = v; }
private:
int x;
};
class Mediator {
friend class ClassA;
friend class ClassB;
public:
void getUser( User U ) { x = U.x; };
protected:
int x;
};
class ClassA {
public:
void getMediator( Mediator M ) { x = M.x; };
void print() { cout << x << endl; }
protected:
int x;
};
class ClassB {
public:
void getMediator( Mediator M ) { x = M.x; };
void print() { cout << x << endl; }
protected:
int x;
};
int main()
{
User U( 123 );
Mediator M;
ClassA A;
ClassB B;
M.getUser( U );
A.getMediator( M );
B.getMediator( M );
A.print();
B.print();
return 0;
}
#include <iostream>
using namespace std;
class User {
friend class Mediator;
public:
User( int v ) { x = v; }
private:
int x;
};
class Mediator {
friend class ClassA;
friend class ClassB;
public:
void getUser( User U ) { x = U.x; };
protected:
int x;
};
class ClassA {
public:
void getMediator( Mediator M ) { x = M.x; };
void print() { cout << x << endl; }
protected:
int x;
};
class ClassB {
public:
void getMediator( Mediator M ) { x = M.x; };
void print() { cout << x << endl; }
protected:
int x;
};
int main()
{
User U( 123 );
Mediator M;
ClassA A;
ClassB B;
M.getUser( U );
A.getMediator( M );
B.getMediator( M );
A.print();
B.print();
return 0;
}
Все получилось. Переделал под работу со строками. lazybiz, а скажи ка, если бы нужно было реализовать подобную задачу на API, т.е. при роботе с окнами, ты бы тоже использовал композицию, или в API есть по изощренней методы для такого рода задач?
зачем нам нужен посредник в данном случае?
прочитал это:
1) Явно создать и инициализировать объект класса User.
2) Получить значение обьекта User и сохранить в классе MEdiator - посредник.
3) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classA
4) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classB
как я понимаю суть в том что есть N-потребителей, которых работают не с самим источником информации, а с посредником. Зачем? - наверно источники информации могут меняться(например, вводил пользователь данные клавиатурой, а начал вводить голосом), тогда при взаимодействии потребителя с источником напрямую, на потребителя возлагается задача определения "правильного" источника. Ну а тут предлагается решить 1 раз эту проблему посреднику, а потребителям использовать решение.
Ну это мои предположения. Если я все верно понял - то изощренных средств в АПИ не знаю, но в QT есть удобный механизм сигналов и слотов.
Для решения надо создать класс Посредник и класс Потребитель.
в Посредник добавляем слот для получения данных от источника. Слот- это функция, которая вызывается по сигналу о приходе данных. в Посрденик добавляем сигнал для оповещения потребителей о том, что новые данные пришли и успешно сохранены в Посреднике.
в Потребитель добавляем слот для получения данных от Посредника.
Все получилось. Переделал под работу со строками. lazybiz, а скажи ка, если бы нужно было реализовать подобную задачу на API, т.е. при роботе с окнами, ты бы тоже использовал композицию, или в API есть по изощренней методы для такого рода задач?
Если честно, то я вообще не понял что должна делать твоя программа, а просто дал тебе то что ты просил.
О каких API и про какую композицию ты говоришь?
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.