1 Востаннє редагувалося exmate (31.08.2015 23:28:59)

Тема: ініціалізація конструктора базового классу в залежності від нащадка

Шалом добрі люди!

Домоможить з такою проблемою:

Є базовий класс

class object
{
   
    float area;
public:
    object(float s); // ініціалізація  площини
    ~object(void);
};

Є нащадок

class derived: public object
{
   
    float diameter, lenght;
public:
    derived(float d, float l); // ініціалізація  діаметру та довжини (площа в базовому класси залежить від нащадка)
    ~derived(void);
};

Реалізація конструктора нащадка
derived::derived(float l, float diam):object(l*diam*diam/4*3.14) // <== Якось воно не дуже вигляд має
                                                          ^^^^^^^^^^^^ 
                                                          розрахунок площи для базового класу
{
    ......
}


Є можливість визивати базовий конструктор з тіла конструктора нащадка ?


Не дуже подобається формула в параметрах функції. 

Дякую.

2 Востаннє редагувалося Дмитро-Чебурашка (01.09.2015 00:10:22)

Re: ініціалізація конструктора базового классу в залежності від нащадка

М так... Я не знаю!!! Я дуже і дуже поверхнево знайом. Здається що не можна!

А викладьте якщо можливо увесь код. Так буває і легше думати, зрозуміліше, і можна вчитися.

3

Re: ініціалізація конструктора базового классу в залежності від нащадка

Є можливість визивати базовий конструктор з тіла конструктора нащадка ?

Точно знаю що можна, але як -- вже забув :D 10 годів на плюсах не кодив

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

4

Re: ініціалізація конструктора базового классу в залежності від нащадка

Здається, тут була відповідь, яка вас задовільнила, прошу її автора повторити.

Щоб не привласнювати чужі лаври, але лишити відповідь у гілці - під спойлером. Буде оригінал - видалю

float derived::calculateArea( float l, float diam )
{
  return l*diam*diam/4*3.14; 
}
derived::derived(float l, float diam) : 
    object( calculateArea(l, diam) )
{
} 

І, звісно, не можна викликати батьківський конструктор примусово інакше як на початку роботи конструктора (а точніше - при ініціалізації): коли починає працювати конструктор класу, всі залежні об'єкти вже мають існувати, і батьківський - також.

Подякували: Arete, exmate, Yola3

5

Re: ініціалізація конструктора базового классу в залежності від нащадка

Дякую всім. Проблема вирішується за допомогою функціі в класі. Я думав що будь-яке посилання на функции класу до конструктора неможливе... Навіть не перевіряв - а треба було б.
Сам я не програмер - колись 16р назад вчився потім пійшов на іншу спеціальність. Зараз починаю все спочатку.