Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Наследование. я чего-то не разберусь с доступом.объясните пожалуйста - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача по С++ http://www.cyberforum.ru/cpp-beginners/thread590326.html
Дан файл Assort , который содержит сведения об игрушках (название, стоимость, возрастные границы). Определить: а) название (до 140р детям до 5 лет); б) самый дорогой конструктор; в) наиболее...
C++ Ввести строку А с клавиатуры, содержащую арифметическое выражение. Подсчитать количество используемых цифр и букв. Ввести строку А с клавиатуры, содержащую арифметическое выражение. Подсчитать количество используемых цифр и букв. Заменить операцию «+» на «-». Подсчитать количество действий в выражении. http://www.cyberforum.ru/cpp-beginners/thread590310.html
Разработка модульной структуры C++
Всем доброго времени суток. В с++ я пока еще медный чайник, посему мне требуется ваша помощь=). Задание: Реализовать в виде модуля набор подпрограмм для выполнения следующих операций с...
C++ Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей
Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей
C++ Заданы комплексные числа, представленные в программе массивом array[] структур. http://www.cyberforum.ru/cpp-beginners/thread590307.html
Используя указатели над структурами решить задачу: заданы комплексные числа, представленные в программе массивом array структур. Вычислить количество комплексных чисел, равных первому числу. Из...
C++ Описать и ввести массив, содержащий 10 записей заданной структуры. Описать и ввести массив, содержащий 10 записей следующей структуры: название, дата( изгот. и срока годности), изготовитель. Вывести массив в табличном виде. Вывести списки товара, годного до мая... подробнее

Показать сообщение отдельно
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141

Наследование. я чего-то не разберусь с доступом.объясните пожалуйста - C++

29.05.2012, 16:18. Просмотров 340. Ответов 5
Метки (Все метки)

Суть в том, что есть 2 класса.(предок потомок)
У каждого класса есть friends подкласс, которые в свою очередь связаны тем же отношением(предок, потомок)
предок----->наследник
__|___________|_____
__|___________|_____
__|___________|_____
__V___________V_____
предок----->наследник

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
template<class T>
class base
{
protected:
    T* data;
public:
    base(){data = NULL;}
    virtual ~base(){if(data)delete data;}
 
    friend class it;
 
    class it
    {
    protected:
        base* b;
    public:
        virtual ~it(){;}
        it(base* p ){ b = p;}
        virtual void* operator*()
        {
            return (void*)(b->data);
        }
    };
};
 
template<class T,class D>
class son: public base<T>
{
    D* d;
public:
    son():base(){d = NULL;}
    virtual ~son(){if(d) delete d;}
 
    friend class son_it;
 
    class son_it: public it
    {
    public:
        son_it(son* p):it(p){;}
        virtual ~son_it(){;}
        void* operator*()
        {
            if(((son*)b)->d)return (void*)(((son*)b)->d);
            return (void*)(((it*)this)->b->data);//error C2248 - обращение к protected зоне
//          ((it*)this)->b; //аналогично
        }
    };
};
int main()
{
    base<int> a;
    son<int,char> b;
    son<int,char>::son_it it_b(&b);
    base<int>::it it_a(&a);
    *it_a;
    *it_b;
    system("pause");
    return EXIT_SUCCESS;
}
так вот, почему выдается такая ошибка, почему приведя тип указателя от son_it* к it* я не могу залезть в защищенную зону класса it(это вообще убило), а так же base....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru