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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обмен опытом по программированию на С++ http://www.cyberforum.ru/cpp-beginners/thread845689.html
А никто не знает сайты, направленные на обмен опытом между программистами, как здесь: http://www.cyberforum.ru/cpp-beginners/thread332670-page5.html То есть чтоб программисты бесплатно совместно работали над какими-то проектами и получали практический опыт Добавлено через 1 минуту .. и чтоб никто не говорил: "Как, вы ЭТОГО не знаете??" :)
C++ Библиотека OpenGL Как подключить библиотеку OpenGL в VS 2010? http://www.cyberforum.ru/cpp-beginners/thread845671.html
C++ Нахождение суммы из 3 массивов, пока не более числа
Здравствуйте всем! Подскажите пожалуйста. Ситуация такова. Имеется три массива. оба из них одного размера n, второй n+2; Необходимо поячеечно суммировать элементы массивов, т.е. mas+mas2+mas3+mas... до тех пор,пока,например,сумма не достигнет 200. При этом необходимо выявить, сколько ячеек удалось сложить, т.е. просуммировать индексы. Уже который час ломаю мозг.Подскажите?
Использовать функции: strtok, isalpha, strcpy, strcat C++
Доброго времени суток. Надеюсь на вашу помощь. Дано предложение, слова в нем разделены пробелами. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово. Если таких слов больше половины, то их необходимо перенести в конец предложения. Необходимо использовать функции: strtok, isalpha, strcpy, strcat.(с++) Заранее спасибо.
C++ Даны строки S, S1 и S2. Заменить в строке S первое вхождение строки S1 на строку S2 C++ http://www.cyberforum.ru/cpp-beginners/thread845620.html
#include <iostream> #include <cstdlib> #include <cstring> #include <conio.h> using namespace std; int main() { setlocale(LC_ALL,"russian"); char sBuf; long sLen;
C++ Глобальный член класса Пишу программу, в которой много классов, и каждый лежит в своем файле. Все работает. Но как только после определения класса я объявляю член этого класса, компилятор говорит, что этот объект определен в каждом файле, к которому я подключал исходный, с описанием класса. При чем я использую дерективы #ifndef для избежания повторного включения. Где мне правильно объявить член этого класса, что-бы его... подробнее

Показать сообщение отдельно
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1

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

23.04.2013, 09:36. Просмотров 402. Ответов 4
Метки (Все метки)

Здорова!
Есть задачка:
Изобразите возможное распределение памяти для класса 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();
можно токо так.
Ладно я тут вижу народ не в теме, значит механизм виртуального базового класса рассматривать не будем.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru