29.05.2012, 16:18. Просмотров 350. Ответов 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....