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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача по С++ http://www.cyberforum.ru/cpp-beginners/thread590326.html
Дан файл Assort , который содержит сведения об игрушках (название, стоимость, возрастные границы). Определить: а) название (до 140р детям до 5 лет); б) самый дорогой конструктор; в) наиболее дорогие игрушки (от самой дорогой минус 50р); г) игрушки кроме мяча ребёнку до 3х лет); д) самая дорогая игрушка ребёнку до 4х лет. Заранее очень благодарен, иначе могут отчислить :(
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 записей следующей структуры: название, дата( изгот. и срока годности), изготовитель. Вывести массив в табличном виде. Вывести списки товара, годного до мая 2000г., затем изготовленного в Бельгии. Найти средний срок годности . подробнее

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

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

29.05.2012, 16:18. Просмотров 329. Ответов 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....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru