Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
1

Как не нарушить инкапсуляцию?

07.08.2015, 08:03. Показов 1134. Ответов 2
Метки нет (Все метки)

Попал в такой парадокс...
Есть класс "А"
Есть класс "Б"
Есть класс "В, который наследник класса А".

У класса А есть три аргумента.
Класс "Б" не должен быть наследником класса "А".
Класс "Б" должен иметь доступ к одному закрытому члену класса "А", к которому больше никто не должен иметь доступ, даже наследники класса А.

Если юзаем friend - он нарушает инкапсуляцию и дает полный доступ ко всем закрытым членам.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2015, 08:03
Ответы с готовыми решениями:

Как удобнее обойти инкапсуляцию в программе из нескольких файлов на С/С++?
Ситуация такая: в программах на Бейсике, например, существуют единые для всего кода переменные, с...

Библиотеки раскрывают инкапсуляцию
.h: #include <string> class A { public: A(); ~A(); private:

Программа на создание класса и инкапсуляцию
Здравствуйте. Подскажите, пожалуйста идею для решения задачи на создание класса и инкапсуляцию....

Добавить в класс конструктор и реализовать наследование и инкапсуляцию
Помогите правильно переделать пример класса, так чтобы там было наследование, поля с мейна,...

2
Модератор
Эксперт С++
11482 / 9400 / 5649
Регистрация: 18.12.2011
Сообщений: 25,114
07.08.2015, 08:45 2
Лучший ответ Сообщение было отмечено Valeryn как решение

Решение

Предлагаю такую идею - использовать typeid:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
#include <cstring>
using namespace std;
class B;
class A
{
private:
    int x;
protected:
    int k;
public:
    void Setx(B* b,int n)
    {
        if(strcmp(typeid(*b).name(),"class B")==0)
            x=n;
    }
};
class B
{
public:
    void SetValue(A& a,int y)
    {
        a.Setx(this,y);
    }
};
 
int main()
{ 
    A a;
    B b;
    b.SetValue(a,1); // это то, что хочется
    a.Setx(&b,1); // а это, к сожалению, лазейка
    return 0;
}
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
07.08.2015, 09:13 3
C++
1
2
3
4
5
6
7
8
9
class base
{
public:
    class
    {
        int m_Data;
        friend class other;
    } Internal;
};
Только класс other может делать так:
C++
1
Base.Internal.m_Data = 123;
В остальных случаях будет ошибка компиляции.
4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2015, 09:13

Необходимо рассчитать выражение, используя ООП по максимуму, применить инкапсуляцию и тд
Доброго времени суток, уважаемы пользователи CyberForum! Нуждаюсь в Вашей помощи. Прочитал уже...

Вставить в массив 2 числа так, что бы не нарушить упорядоченность элементов
Как это решить? &quot;Данный, отсортированный по убыванию значений, массив целых чисел. Вставить в...

Как применить инкапсуляцию в коде?
Здравствуйте, краешком имею представление об инкапсуляции. Не очень понимаю этот раздел, а точнее...

Как правильно передать данные из View во ViewModel чтобы не нарушить шаблон MVVM
Здравствуйте. Вопрос такой есть View в него загружается html страница из интернета. И есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru