Dziedziczenie klasy TShape

0

Witam
Potrzebuje zrobić udoskonaloną wersję TShape , i nie mogę poradzić sobie z odziedziczeniem funkcji publicznych tego TShapa. Mój kod:

class Ball
{   private:
        TShape *ball;
    public:
        Ball(void);

};
 Ball::Ball(void)
 {  ball = new TShape(Form1);
    ball->Parent = Form1;
    ball->Shape = stCircle;
    ball->Height = 50;
    ball->Width = 50;
    ball->Left = 200;
    ball->Top = 180;
    ball->Brush->Color = clYellow;
    ball->Visible = true;
 }

Ball *pilka1;

gdy wpisuję class Ball:public TShape mam błąd.
W jaki sposób moge odziedziczyć metody i funkcję tego Tshapa??
Pozdro

0

Co, tak nie przechodzi?

class Ball: public TShape
{  
    ...

    public:
        Ball(Classes::TComponent* owner);

};

Ball::Ball(Classes::TComponent* owner)
    :TShape(owner)
{
    ...
}
0

Niestety nie wyskakuje błąd:

[C++ Error] Unit1.cpp(18): E2113 Virtual function 'Ball::Ball(TComponent *)' conflicts with base class 'TShape'

w miejscu:

public:
        Ball(Classes::TComponent* owner);
0

Dodaj __fastcall do konstruktora.

0

Przerobiłem program tak:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TShape *pilka;

class Ball: public TShape
{   private:
        TShape *ball;
    public:
       __fastcall Ball(Classes::TComponent* owner);
      Ball(void);

};
__fastcall Ball::Ball(Classes::TComponent* owner)
    :TShape(owner)
 {  ball = new TShape(Form1);
    ball->Parent = Form1;
    ball->Shape = stCircle;
    ball->Height = 50;
    ball->Width = 50;
   // ball->Left = 200;
    ball->Top = 180;
    ball->Brush->Color = clYellow;
    ball->Visible = true;
 }

Ball *pilka1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        pilka1 = new Ball(Form1);
        pilka1->Brush->Color = clBlue;
        pilka1->Left = 20;
        pilka1->Top = 20;
        pilka1->Visible = true;
        pilka1->Parent = Form1;

}
//---------------------------------------------------------------------------

Ale teraz program tworzy obiekt (kwadrat) pomimo że w kontruktorze dałem żeby to było koło i w ogóle. Jak ktoś wie co zrobić to proszę o pomoc
Pozdro

0

A co ta część ma wspólnego z dziedziczeniem?

ball = new TShape(Form1);
ball->Parent = Form1;
ball->Shape = stCircle;
ball->Height = 50;
ball->Width = 50;
// ball->Left = 200;
ball->Top = 180;
ball->Brush->Color = clYellow;
ball->Visible = true;

Jak już to:

__fastcall Ball::Ball(Classes::TComponent* owner)
    :TShape(owner)
{
    Shape = stCircle;
}
0

Tutaj ustalam sobie w konstruktorze, tak abym po wpisaniu np

Ball *pilka;
pilka = new Ball(Form1);

Miał ten obiekt w określonym miejscu i bym nie musiał pisać jakiej jest wielkości.
Jeżeli źle myślę to mnie popraw. W każdym razie potrzebuje zmodyfikowanej wersji TShape , do którego dorzucę jeszcze jakieś swoje funkcje.
Pozdro i prosze o szybką odpowiedź

0

Ale ja pisałem o tym:

__fastcall Ball::Ball(Classes::TComponent* owner)
    :TShape(owner)
 {  ball = new TShape(Form1);
    ball->Parent = Form1;
    ball->Shape = stCircle;
    ball->Height = 50;
    ball->Width = 50;
   // ball->Left = 200;
    ball->Top = 180;
    ball->Brush->Color = clYellow;
    ball->Visible = true;
 }

po co tworzysz obiekt TShape (ball) wewnątrz pochodnej z TShape, przecież Ball dziedziczy właściwości po TShape?

0

Ale bez
ball = new TShape(Form1);
Nie ruszy. O ile o to chodziło

0

Jak nie ruszy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0