Тема: ООП спадковість

Як мені із начадка передати дані "батькові"

type
  TBuilbExp = class
    FNext:TBuilbExp;
    FWidth,
    FHeigth,
    constructor Create(x,y,h:Cardinal;S:string;p:Boolean);
    procedure AddNext(x,y,h:Cardinal;S:string;p:Boolean);
  end;
//щось подібне 
"батькові".FWidth:="начадок".FWidth;

2

Re: ООП спадковість

Вам цього не треба робити. Дані не поліморфують.

3

Re: ООП спадковість

Дивлячись в якій секції будуть оголошені поля. Усе, що знаходиться в private, доступно лише самому класу, а те, що лежить в protected - класу та його нащадкам.

4

Re: ООП спадковість

Він же код навів - за замовчанням в Delphi чи то public, чи то навіть published, не пам'ятаю точно. Йому потрібно щось інше, заради чого він хоче щось передати "від нащадка предку". Але що саме - мовчить, як партизан.

5

Re: ООП спадковість

Я же щас воюю з формулами   і  у мене є така формула:
5+(1/2)+3^4 якщо розкласти цю формулу в таком вигляді:
5
+
    1
    /   
    2
+   
3
    4
5 це предок +
+ це предок 1/2
1/2  а має нащадків 1, / та 2 (так як це дроби вертикальні то ці нащадки будуть знаходитися на різної висоті порівняно із предками 5 та +.
Тоді мені і потрібно передати предкові наскільки змінилася висота у нащадків щоб 5 та + вирівняти по центру відносно нащадкам.

6

Re: ООП спадковість

Stanislav Stecenko написав:

Я же щас воюю з формулами

Це дуже допоможе тим, хто за півроку хотітиме щось почитати про наслідування і зайде в цю гілку. Створюйте нову гілку - описуйте задачу повністю чи принаймні давайте посилання на старі теми.

Stanislav Stecenko написав:

5 це предок +
+ це предок 1/2

Ви абсолютно не розумієте класів і ООП.
У вас тут дві абсолютно окремі ієрархічні структури: класова (хоча, як я бачу, ви вирішили відбутися одним класом) і дерево розбору виразу (яке ви чомусь будуєте як однозв'язний список). А ще є двовимірна структура формули, яку ви реалізуєте в тому ж дереві/списку, що теж не ґут. Вам не про нащадків в сенсі ООП треба, а про гілки дерева.
Для початку одразу визначиться із тим, що у об'єкта в формулі є різні гілки: є наступні елементи, а є підлеглі. 34+1 і 34+1 складаються з одних і тих самих знаків в однаковому порядку, але в першому виразі + є наступником 3, а в другому - наступником 4 (а 4 в обох - підлеглий 3). Тобто список, де кожен об'єкт посилається на одну гілку, вам зовсім не підходить

Прихований текст
Ще як мінімум треба буде продумати, що з великими дробами робити: там основний елемент - дріб, а решта (2 підлеглих) навколо нього будується. Звісно, питання технічне, але продумати варто. Зверніть увагу, як в TeXі реалізовано.

А тепер - відповідь на ваше питання: щоб знайти материнську гілку в дереві виразу, треба або зберігати посилання на неї в об'єкті, або обходити все дерево, доки не буде знайдено об'єкт, серед підлеглих і наступних гілок якого не буде нашого, це і буде материнська гілка. Раджу перший спосіб, як швидший.

7

Re: ООП спадковість

Погоджуюсь з koala, тільки додам, що якщо якесь поле має бути доступне ззовні, то його треба оголошувати як public. Сподіватися, що Делфі за замовчуванням встановить правильну секцію не варто, бо це залежить від директиви M, і в цьому легко заплутатися. Тому завжди треба явно вказувати секцію.

8 Востаннє редагувалося Stanislav Stecenko (23.08.2015 19:53:14)

Re: ООП спадковість

зберігати посилання на неї в об'єкті


це і мені потрібно

FParent: TBuilbExp;

а клас який я описав вище насправді нетакий я виписав найголовніше

FNext:array of TBuilbExp;
typeC:TtypeVideExp;

9

Re: ООП спадковість

а формули що ви наввели відрізняються перша матеме вид 3^4+1 а друга 3^(4+1)
я дивльсь який синтаксис формул у ворді.

10

Re: ООП спадковість

і як ви формули робити щоб відображалися на сайті formula /formula