Hi!
Public nem public?
Valószínüleg a Származtatásnál nem publikusan örököltél (nem írtad ki a
public-ot a "class Újosztály : RégiOsztály {" sorba), ezért nem láthatók
a RégiOsztály public alatt deklarált válozói. Ha nem publikusan örökölsz,
akkor a property-s változókat még nyílvánossá teheted egy egyszerű típus
nélküli felsorolássa
Egy kis példa:
// Ős osztály ---
class TSzlaSor {
private:
double Fdb,Fear,Fafa; //privát adatok (utód osztály is látja)
public:
AnsiString megn,me,afas; //közvetlen hozzáférésú adatok
void __fastcall Clear(); //adatok törlése
__fastcall TSzlaSor(); //kunstruktor
__property double db = {read = Fdb ,write = Fdb }; //privát adatok közvetve
__property double ear = {read = Fear,write = Fear}; //ezek publikusak
__property double afa = {read = Fafa,write = Fafa};
};
void __fastcall TSzlaSor::Clear() {
megn="";me="";afas="";db=0;ear=0;afa=0;
}
__fastcall TSzlaSor::TSzlaSor() { Clear(); }
// Származtatott osztály ---
class TSzlaTetel : public TSzlaSor {
private:
double __fastcall GetErtek();
double __fastcall GetAErtek();
double __fastcall GetBErtek();
public:
AnsiString vtsz;
void __fastcall Clear(); //adatok törlése (a TSzlaSor->Clear() helyett ez lesz)
__fastcall TSzlaTetel(); //kunstruktor
//__property db,ear,afa; //ez kell,ha nem publikusan örökölsz!
__property double Ertek = {read = GetErtek }; //privát függv. alkalmazása
__property double AfaErtek = {read = GetAErtek}; //ezek publikusak
__property double BruttoErtek = {read = GetBErtek};
};
void __fastcall TSzlaTetel::Clear() { vtsz=NULL;TSzlaSor::Clear(); }
double __fastcall TSzlaTetel::GetErtek() { return ear*db; }
double __fastcall TSzlaTetel::GetAErtek() { return Ertek*afa/100; }
double __fastcall TSzlaTetel::GetBErtek() { return Ertek+AfaErtek; }
__fastcall TSzlaTetel::TSzlaTetel() : TSzlaSor() { Clear(); }
//---
TSzlaTetel z;
TSzlaTetel *t;
void __fastcall Feltolt() { t = new TSzlaTetel();
z.megn="alma";z.db=5;z.me="kg";z.afa=15;z.afas="15";z.ear=60;
t->megn="alma";t->db=5;t->me="kg";t->afa=15;t->afas="15";t->ear=60;
Form1->Label1->Caption = z.BruttoErtek;
//Form1->Label1->Caption = t->BruttoErtek;
delete t;
}//---
Az "improper use of typedef..." a namespace vagy class nevek nem
megfelelő
használatának eredménye...
üdv: Lec
(webes bekuldes, a bekuldo gepe: gulacsi.nkoros.microsystem.hu)
|