-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathD1BaseToD2Base.cpp
More file actions
30 lines (26 loc) · 1.13 KB
/
Copy pathD1BaseToD2Base.cpp
File metadata and controls
30 lines (26 loc) · 1.13 KB
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
/*
* Вам дана следующая иерархия классов:
*/
struct Base { /* ... */};
struct D1 : Base { /* ... */ };
struct D2 : Base { /* ... */ };
struct D3 : D1, D2 { /* ... */ };
/*
* Напишите функцию D1BaseToD2Base, которая преобразует
* указатель типа Base на объект типа D3,
* который ссылается на экземпляр Base, соответствующий D1,
* в указатель, ссылающийся на экземпляр Base соответствующий D2.
* Указание: не забывайте про константность!
*/
// base указывает на экземпляр Base, соответствующий D1
// нужно вернуть указатель на экземпляр Base, соответствующий D2
Base const *D1BaseToD2Base(Base const *base)
{
D1* const d1_ptr = (D1*)base;
D3* const d3_ptr = (D3*)d1_ptr;
D2* const d2_ptr = (D2*)d3_ptr;
Base* const base2 = (Base*)d2_ptr;
return base2;
// Короткая альтернатива
return (D2*)(D3*)(D1*) base;
}