Dobrý den,
chtěl bych se zeptat jak lze provést toto:
class MAINCLASS
{
public:
MAINCLASS()
{
cout << "Main class constructor" << endl;
}
virtual void PrintText()
{
cout << "This is main class function: MAINCLASS::PrintText()" << endl;
}
void _PrintText()
{
PrintText();
}
};
class SUBCLASS: public MAINCLASS
{
public:
SUBCLASS() : MAINCLASS()
{
cout << "Subclass / Mainclass constructor" << endl;
}
void PrintText() override
{
cout << "This is sub-class overrided function SUBCLASS::PrintText()" << endl;
}
};
Mám nadřazenou třídu ve které mám virtuální funkci .. rád bych přes podřazenou třídu "přepsal"
funkci ve třídě nadřazené a také z této nadřazené tuto přepsanou funkci volal. Bohužel nevím jak na to,
tak bych vás chtěl požádat o radu.
Možná jsem to špatně vysvětlil :/ .. Opravuji skripty na herním serveru a rád bych přesně pochopil, jak funguje přidávání skriptů. Oprava skriptů je jednoduchá záležitost, ale pochopit základ jádra serveru je těžší.
Vše funguje tak, že pro "non player charactery" je zvláštní nadřazená třída, která má nejaké předdefinované funkce, které se volají v určité chvíli (například to npc začne bojovat) a podobně. Vypadá to následovně:
class CREATURESCRIPT
{
public:
CREATURESCRIPT(char *scriptname);
virtual void OnEnterCombat()
{
Say("This is default: OnEnterCombat ");
}
virtual void OnReciveEmote()
{
Say("This is default: OnReciveEmote");
}
};
Je to hoodně zjednodušená verze, protože originál má několik tisíc řádků kódu.
Je tam funkce pro všechny podněty.
Třída se sktiptem vypadá následovně:
class boss_test_creature : public CREATURESCRIPT
{
public:
boss_test_creature () : CREATURESCRIPT("boss_test_creature")
{}
void OnEnterCombat() override
{
Say("ahoj ja jsem prisera");
}
void OnReciveEmote() override
{
Say("Nekdo na me mava");
}
};
A někde v main funkci se dokola opakuje kontrola podnětů a podle nich se volají funkce ve třídě CREATURESCRIPT...
Ve funkci, která inicializuje server se volá funkce:
void AddScript()
{
new boss_test_creature();
}
Tím se zavolá konstuktor třídy bosse a přepíšou si v jedné z instancí třídy CREATURESCRIPT předdefinované funkce... tak by mě zajímalo, jak se dá funkcí z podřazené třídy přepsat funkce v nadřazené třídě a také z nadřazené třídy tyto přepsané funkce volat. Omlouvám se za moje výrazy, ale na to jsem nikdy nebyl dobrý.
princip je v tom, ze trida, ze ktere vsechno dedi, definuje taky rozhrani a vsechny zdedene tridy to rozhrani maji implementovat po svem... a aby se volaly spravne metody, ikdyz se pouziva ukazatel na zakladni tridu, tak je tam to virtual - jaka metoda se pouzije se zjistuje az za behu (z tabulky virtualnich metod)
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...