Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ссылка на производный класс из базового, ссылка на производный класс из базового 
V
    Опции темы
cooper123
Дата 24.11.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



Не могу разобраться. Помогите. Поиск тоже затруднен в силу не понимания. 

Есть базовый класс. из него строятся производные классы. потом строится массив производных классов по ссылке на базовый класс. 
Это все надо что бы сканировать массив производных классов и выполнять виртуальную функцию базового класса определенную в производном. 
А вот как вытащить пораметры производного класса из ссылки на базовый не понятно. 

Код


class strategy{
public:
  strategy();
  virtual compute();
  virtual init();
  virtual init_n();
  std::string name,space;
  int time_scale;
};

class  s1 : public strategy{
 public:
   double ps11,ps12;
}

class  s2 : public strategy{
 public:
   double ps21,ps22;
}

strategy *sl[10];

void load_from_xml(){
  ....
  if(xml_name == "s1"){ 
    s1 = new s1();
    s1.ps11 = xml_s1.ps11;
    s1.ps12 = xml_s1.ps12;
    sl[i] = s1
 }
  if(xml_name == "s2"){ 
    s2 = new s1();
    s2.ps21 = xml_s2.ps21;
    s1.ps22 = xml_s1.ps22;
    sl[i] = s2
 }
}

void compute_n(){
   for(i=0;i<size_of_strategy_array;i++){
       ls[i]->compute();
  }

void print_param(){
   for(i=0;i< size_of_strategy_array;i++){
     cout<<" name "<<sl[i]->name;
     if(sl[i]->name == "s1"){
       cout<<" how to print  s1.ps11 ???????"
       cout<<" how to print  s1.ps12 ???????"
     }
     if(sl[i]->name == "s2"){
       cout<<" how to print  s2.ps21 ???????"
       cout<<" how to print  s2.ps22 ???????"
     }
}


 обьеденить стратегии я могу только по базовому классу, насколько я понимаю. но мне  хочется из этого контейнера,
 списка или массива, который определен по ссылке на базовый обьект, иметь еще доступ к спецефическим параметрам 
конкретной реализации производного класса. Хотя бы для того что бы распечатать. Но хочется еще и понять.
PM MAIL   Вверх
bsa
Дата 24.11.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



во-первых, у базового класса должен быть виртуальный деструктор.
во-вторых, чтобы получить доступ к полям производных классов через ссылку на базовый необходимо, чтобы у базового были соответствующие виртуальные методы, переопределенные в производных.
PM   Вверх
cooper123
Дата 24.11.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



насчет полей понятно. 

а насчет деструктора- почитаю, но пока не увидел каких либо проблемм. а что может быть плохого?


спасибо за ответ. 
PM MAIL   Вверх
bsa
Дата 24.11.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(cooper123 @  24.11.2011,  14:59 Найти цитируемый пост)
а что может быть плохого?

утечка ресурсов.
PM   Вверх
borisbn
Дата 24.11.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(cooper123 @  24.11.2011,  13:59 Найти цитируемый пост)
а что может быть плохого?

Код

struct Base {
    Base() {
        cout << "Base()" << endl;
    }
// virtual
    ~Base() {
        cout << "~Base()" << endl;
    }
};

struct Deriv : public Base {
    Deriv() {
        cout << "Deriv()" << endl;
        m_ptr = new int[ 42 ];
    }
    ~Deriv() {
        cout << "~Deriv()" << endl;
        delete [] m_ptr;
    }

    int * m_ptr;
};

Base * base = new Deriv();
delete base;


проверь сам


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.