Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
1

Возможное распределение памяти

23.04.2013, 09:36. Показов 661. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здорова!
Есть задачка:
Изобразите возможное распределение памяти для класса Radio из параграфа 15.2.3.1. Объясните как можно реализовать вызов виртуальной функции.

и вот код с параграффа:
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
//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;
}
Я чото не пойму как ее делать. Что имеется введу под "Изобразите возможное распределение памяти" ?

И под этим что имеется в веду "Объясните как можно реализовать вызов виртуальной функции."?
Похоже функцию Sorable::write() наверно. Но а как же мы ее вызовем, если она чисто виртуальная?

Добавлено через 9 часов 47 минут
Тут походу в задаче это реплицируемые базовые классы, то есть в классе Radio находится две копии самого верхнего базового класса Storable?

А как же нам вызов виртуальной функции реализовать?
Походу должен быть указатель на Storable например Storable* S; Ну и как вызвать виртуальную функцию через указатель? На какой класс указатель мы должны присвоить S? Если мы указатель на Radio* присвоим S и вызовем S->write(), то будет неоднозначность правильнож? Ведь в Radio как бы хрониться два объекта класса базового класса Storable?

Походу задачку устно нужно решать, ну и можно подкрепить чо нить кодом.

Как с этим разберемся потом еще рассмотрим механизм "виртуального базового класса", потом так для примера.

Ладно я так смотрю тут походу нужно хорошо тестить, чтобы разобраться, а так фиг что поймешь.

Добавлено через 10 минут
От пытаюсь еще создать объекты классов:
C++
1
2
Transmitter T;
    Receiver Re;
Выдает ошибку типо они виртуальные классы, но как это так? ведь виртуальный класс это класс у которого есть чисто виртуальная функция. Да ок. Значит, что можно сделать предположение, что так как в классах Transmitter Receiver не были переопределены функции которые виртуальные в Storable, то они просто перенеслись в них и они стали виртуальными или как это понимать? Попытаться переопределить их и затем вызвать? Ок щас попробую.

Да все таки не ошибся оказывется если не замещаем функции, то производный класс автоматически становится виртуальным.

А зачем еще в Storable виртуальный деструктор создается?

Добавлено через 47 минут
Ладно с виртуальным деструктором разобрался, так всетаки какуюж виртуалльную функцию имели в веду write() или read() ?

Добавлено через 2 минуты
Чо то мне кажется, что нельзя ни одной вызвать.
C++
1
2
Radio R;
    Storable* S=&R;
Вот отетот код выдает ошибку типо Storable является неоднозначной базой для Radio. Значит можно токо вызвать виртуальные функции для каждого класса из двоих. Щас попробую.

Добавлено через 5 минут
я думаю утето от решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Radio R;
    //Storable* S=&R;//owibka nel6z9 tak kak neodnoznachnoct6 dva ob6ekta
    
    //mojno cherez bazy Transmitter.
    Transmitter* T=&R;
    T->write();
    T->read();
    
    cout <<endl<<endl;
    //mojno cherez bazy Receiver
    Receiver* Re=&R;
    Re->write();
    Re->read();
можно токо так.
Ладно я тут вижу народ не в теме, значит механизм виртуального базового класса рассматривать не будем.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2013, 09:36
Ответы с готовыми решениями:

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Распределение памяти
При загрузки таблицы загружаются и пересчитываются формулы в ячейках. Скажите пожалуйста почему при...

распределение памяти
размещение памяти. LPVOID trm = VirtualAlloc(NULL, lasth+1*(sizeof (float)), MEM_COMMIT,...

Распределение памяти
Растпределение памяти без использования дискового пространства перемещаемыми разделами.

4
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.04.2013, 09:46 2
ninja2, Поговорили сами с собой? Что ж, бывает полезно. Но я вот так и не понял в чем вопрос. Вы не могли бы писать попонятнее? Кол-во ошибок зашкаливает, просто нереально читать. Вместо того, чтобы вываливать стену текста на форум - лучше сформулируйте четко, без ошибок и понятно вопрос.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
23.04.2013, 09:53  [ТС] 3
Цитата Сообщение от ForEveR Посмотреть сообщение
ninja2, Поговорили сами с собой? Что ж, бывает полезно. Но я вот так и не понял в чем вопрос. Вы не могли бы писать попонятнее? Кол-во ошибок зашкаливает, просто нереально читать. Вместо того, чтобы вываливать стену текста на форум - лучше сформулируйте четко, без ошибок и понятно вопрос.
Ок.
Вопрос, то не сильно понятный мне. Вопрос это само условие задачи в верху и код с параграфа под условием.
А то что ниже, то я как бы пытался ее разобрать, а мб и кого то натолкнуть на идею как ее решать (форумчан). Я просто слабо разбираюсь в этом поэтому там и не понятно, что я имел введу.

А с собой поговорить прикольно. (мозговой штурм с собой )

Ну я вообщем разобрался. Запутанная задачка.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
23.04.2013, 09:53 4
Походу должен быть указатель на Storable например Storable* S; Ну и как вызвать виртуальную функцию через указатель? На какой класс указатель мы должны присвоить S? Если мы указатель на Radio* присвоим S и вызовем S->write(), то будет неоднозначность правильнож? Ведь в Radio как бы хрониться два объекта класса базового класса Storable?
Очевидно да. И решается это соответственно элементарно. Кастим к Transmitter или Receiver и получшившийся указатель кастим к Storable.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
23.04.2013, 10:02  [ТС] 5
Цитата Сообщение от ForEveR Посмотреть сообщение
Очевидно да. И решается это соответственно элементарно. Кастим к Transmitter или Receiver и получшившийся указатель кастим к Storable.
Ну да отак от:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}
Ну решается не так, то элементарно, если не шаришь или первый раз решаешь. Щас конечно я б ее по быстрому решил.
0
23.04.2013, 10:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 10:02
Помогаю со студенческими работами здесь

Динамическое распределение памяти
Дан динамический целочисленный массив y1,y2,....,yn. и и динамическая символьная переменная h. Если...

Динамическое распределение памяти
Столкнулся со следующей задачей: Создать список, элементами которого являются целые числа. Данные...

Динамическое распределение памяти.
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; int bespor(int *ptr); void main(void){ int...

Динамическое распределение памяти
Прошу помощи! Даны действительные числа a1...an2 . Получить действительную квадратную матрицу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru