Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Распределение памяти для класса Radio (база реплицируемый).

Posted on 22 апреля, 201323 апреля, 2013 by admin

Изобразите возможное распределение памяти для класса Radio из параграфа 15.2.3.1. Объясните как можно реализовать вызов виртуальной функции.

Вот код который был в параграфе:

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
//racpredelenie pam9ti dl9 Radio
#include <iostream>
using std::cout;
using std::endl;
class Storable
{
public:
    virtual const char* get_file()=0;
    virtual void read()=0;
    virtual void write()=0;
    virtual ~Storable(){}
};
class Transmitter : public Storable
{
public:
    void write();
    //...
};
class Receiver : public Storable
{
public:
    void write();
    //...
};
class Radio : public Transmitter, public Receiver
{
public:
    const char* get_file();
    void read();
    void write();
    //...
};
void Radio::write()
{
    Transmitter::write();
    Receive::write();
    //dalee piwem informaciyu, cpecufichnyyu dl9 Radio
}
int main()
{
    
    
    return 0;
}

Как мы видим у нас дано 4 класса построены ромбом.

Изобразите возможное распределение памяти для класса Radio. Я не знаю, что на это ответить. Какое же здесь будет распределение памяти? Я так думаю, что в Radio будет два объекта класса Storable хранится, а это значит, что если мы присвоим указателю на Storable адрес объекта Radio, то у нас будет неоднозначность, компилятор не будет знать, кокой объект Storable ему использовать, потому что их два Storable::Transmitter и Storable::Receiver. Так что так. Как же нам быть? А все просто вызвать виртуальную функцию для какого то отдельного объекта или для Transmitter или для Receiver. А еще хочу сказать, что эти классы Transmitter и Receiver виртуальные, потому что мы в них не переопределили чисто виртуальные функции из класса Storable, и они просто перенеслись в классы Transmitter и Receiver так как они есть чисто виртуальными, поэтому объекты этих классов создавать нельзя.

Я щас вам просто решение напишу сам код:

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
60
61
62
63
64
65
66
67
//racpredelenie pam9ti dl9 Radio
#include <iostream>
using std::cout;
using std::endl;
 
//camui verxnii bazovui klacc
class Storable
{
public:
virtual const char* get_file()=0;
virtual void read()=0;
virtual void write()=0;
virtual ~Storable(){}
};
 
class Transmitter : public Storable
{
public:
void write(){cout <<"Transmitter::write()"<<endl;}
//...
};
 
class Receiver : public Storable
{
public:
void write(){cout <<"Receiver::write()"<<endl;}
//...
};
 
//camui nijnii bazovui klacc
class Radio : public Transmitter, public Receiver
{
public:
const char* get_file(){cout <<"Radio::get_file()"<<endl;}
void read(){cout <<"Radio::read()"<<endl;}
void write();
//...
};
 
void Radio::write()
{
Transmitter::write();
Receiver::write();
//dalee piwem informaciyu, cpecufichnyyu dl9 Radio
}
 
int main()
{
Radio R;
Storable* S;//owibka nel6z9 tak kak neodnoznachnoct6 dva ob6ekta
//mojno cherez bazy Transmitter.
Transmitter* T=&R;
S=T;//кастим к Storable
S->write();
S->read();
cout <<endl<<endl;
//mojno cherez bazy Receiver
Receiver* Re=&R;
S=Re;//кастим к Storable.
S->write();
S->read();
return 0;
}

От отакое решение этой задачки. А что по первой части, то там видимо лишний объект будет создан, то есть 4 базовых класса будет в Radio.

[youtube]http://www.youtube.com/watch?v=3syw1S9I_xY[/youtube]

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (1)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant