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

Полиморфизм, наследование и приведение экземпляров класса одного к другому - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ матрица с++ http://www.cyberforum.ru/cpp-beginners/thread111707.html
помогите пожалуйста!!!! 1.Составить программу для подсчета среднего арифмитического элемента,расположенных на главной и побочной диагоналях в квадратной целочисленной матрице Х размером N+М. 2.Дана...
C++ Деревья(обьясните) помогите разобраться с деревьями (с построением и работой над ними) ПЛЗ гарю!!!!!! http://www.cyberforum.ru/cpp-beginners/thread111698.html
количество чисел, совпадающих с номером столбца, в которых они находятся C++
Задача такая: Дана целочисленная прямоугольная матрица. Определить: 1) сумму элементов тех строк, которые содержат хотя бы один нулевой элемента; 2) количество чисел, совпадающих с номером...
Метод Гаусса C++
Подскажите пожалуйста код в С++ решение слау методом гаусса с выбором главного элемента по строке...
C++ Составить частотный словарь вводимого текста http://www.cyberforum.ru/cpp-beginners/thread111682.html
14. Составить частотный словарь вводимого текста. Распечатать его по алфавиту, а справа от каждого слова – частоту, с которой оно встретилось.
C++ Метод Джордана-Гаусса Всем доброго времени суток))) У меня вот такая проблема, нужно доделать прогу(метод Джордана-Гаусса), то есть нужно сделать так, что бы данные не выводились рандомно на экран, а выводились рандомно в... подробнее

Показать сообщение отдельно
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921

Полиморфизм, наследование и приведение экземпляров класса одного к другому - C++

01.04.2010, 22:09. Просмотров 1909. Ответов 3
Метки (Все метки)

Есть некий класс со своими переменными,его экземпляр занимает какое-то количество памяти.
Интерфейс выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* -------------------------------------------------------------------------- */
  class Subroutine {
     public:
 
        void setName(const string  *const s) {_name = *s;};
        void setVars(var_Arr_t *const vars) {variables = vars;};
        void setArrs(arr_Arr_t *const arrs) {arrays = arrs;};
        void setLabs(lab_Arr_t *const labs) {labels = labs;};
 
 
        std::string GetName()  const {return _name;};
        var_Arr_t   *getVars() const {return variables;};
        arr_Arr_t   *getArrs() const {return arrays;};
        lab_Arr_t   *getLabs() const {return labels;};
     private:
        string _name;
        stmt_Node_t *address;
        var_Arr_t *variables;
        arr_Arr_t *arrays;
        lab_Arr_t *labels;
        vector <Variable> params; // FIXME
  };
И у него есть класс потомок (так вроде называется?).И у этого класса-потомка есть ещё одна (для примера) переменная (и с ней экземпляр занимает другое количество памяти) :
C++
1
2
3
4
  class Function : public Subroutine {
     private:
        Value *returnable;
  };
Я хочу сделать одну таблицу,чтобы в ней были экземпляры этих двух классов в смешанном виде (то есть в первом поле будет какой-то флажок,для определения вида класса),вообще не знаю,хорошая ли это идея,но просто любопытно.. Как в этом случае будет распределяться память в контейнере? Можно ли безбоязненно приводить один тип к другому?
Тут у меня такое ощущение,что нужно делать контейнер для класса Function, и при необходимости приводить его к классу-родителю,но не наоборот. При этом между экземплярами будут "пустоты" в памяти. В обратном случае возможны "повреждения памяти",то есть расположение элементов будет "в нахлёст".
Правильно ли я понимаю? Или реализации компиляторов как-то заботятся о возможном добавлении класса потомка в контейнер?
Как правильно?

Добавлено через 10 минут
P.S. В принципе,можно хранить указатели на экземпляры класса,и тогда проблемы по идее быть не должно,но всё же ответ на вопрос хотелось бы услышать,чтобы понять суть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru