S
Stashevckiy
Привет! Подскажите, пожалуйста, как из производного класса получить значение private - переменной базового класса? Спасибо!
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
#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;
}
#ifndef USER_H
#define USER_H
class User : public Mediator
{
public:
User( const char * = 0 );
private:
char * temp;
};
User::User(const char * variable):Mediator( variable )
{
temp = new char [ strlen(variable) + 1 ];
strcpy( temp, variable );
cout<<"\C_User ---> "<<temp<<"\n"<<endl;
}
#endif
#ifndef MEDIATOR_H
#define MEDIATOR_H
#include "ClassB.h"
class Mediator: public ClassA
{
public:
Mediator( const char * = 0);
ClassB obj;
private:
char * storage;
};
Mediator::Mediator(const char * variable) : ClassA ( variable)
{
storage = new char [ strlen(variable) + 1 ];
strcpy( storage, variable);
obj.setTT(variable);
}
#endif
#ifndef CLASSA_H
#define CLASSA_H
#include "iostream"
using namespace std;
class ClassA
{
public:
ClassA( const char * = 0);
char * var;
};
ClassA::ClassA( const char * temp)
{
var = new char [ strlen(temp) + 1 ];
strcpy(var, temp);
cout<<"ClassA ---> "<<var<<"\n"<<endl;
}
#endif
#ifndef CLASSB_H
#define CLASSB_H
#include "iostream"
using namespace std;
class ClassB
{
public:
ClassB( const char * = 0);
void setTT( const char * );
private:
char * tt;
};
ClassB::ClassB( const char * temp)
{
}
void ClassB::setTT(const char * v)
{
tt = new char [ strlen(v) + 1 ];
strcpy(tt, v);
cout<<"\ClassB ---> "<<tt<<"\n"<<endl;
}
#endif
#include "iostream"
using namespace std;
#include "ClassA.h"
#include "ClassB.h"
#include "Mediator.h"
#include "User.h"
void main()
{
User u("You don't like - you don't buy!");
}
1. Получить значение можно при помощи public метода, например.как из производного класса получить значение private - переменной базового класса?
class A{
/...
public:
int getVar();
private:
int var;
//...
};
int A ::getVar() {
return var;
}
calss B: public A {
//...
};
2. Если нужен полноценный доступ к полю базового класса - используй protected.
#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;
}
#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;
}
Держи.
C++:#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; }
как я понимаю суть в том что есть N-потребителей, которых работают не с самим источником информации, а с посредником. Зачем? - наверно источники информации могут меняться(например, вводил пользователь данные клавиатурой, а начал вводить голосом), тогда при взаимодействии потребителя с источником напрямую, на потребителя возлагается задача определения "правильного" источника. Ну а тут предлагается решить 1 раз эту проблему посреднику, а потребителям использовать решение.1) Явно создать и инициализировать объект класса User.
2) Получить значение обьекта User и сохранить в классе MEdiator - посредник.
3) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classA
4) Получить сохраненное значение обьекта User из класса Mediator и сохранить в классе classB
Посредник Пс1;
Потребитель Пт1, Пт2;
connect( Некоторая_Кнопка, SIGNAL(pressed()), Пс1, SLOT(Прием_данных()));
connect( Пс1, SINGAL(данные_сохранены_посредником()), Пт1, SLOT(Новые_данные()));
connect( Пс1, SINGAL(данные_сохранены_посредником()), Пт2, SLOT(Новые_данные()));
Если честно, то я вообще не понял что должна делать твоя программа, а просто дал тебе то что ты просил.Все получилось. Переделал под работу со строками. lazybiz, а скажи ка, если бы нужно было реализовать подобную задачу на API, т.е. при роботе с окнами, ты бы тоже использовал композицию, или в API есть по изощренней методы для такого рода задач?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!