Virtuální Funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Virtuální Funkce – C / C++ – Fórum – Programujte.comVirtuální Funkce – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Cruppy0
Newbie
9. 7. 2014   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 88.103.3.–
KIIV
~ Moderátor
+43
God of flame
9. 7. 2014   #2
-
0
-

misto:
void PrintText() override
dej jen

virtual void PrintText()

timdle se to predefinuje

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Cruppy0
Newbie
9. 7. 2014   #3
-
0
-

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ý.

Nahlásit jako SPAM
IP: 88.103.3.–
KIIV
~ Moderátor
+43
God of flame
10. 7. 2014   #4
-
0
-

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...
Cruppy0
Newbie
10. 7. 2014   #5
-
0
-

ani nevim jak mám poděkovat :)

Nahlásit jako SPAM
IP: 88.103.3.–
10. 7. 2014   #6
-
0
-

Od doby co byly vynalezeny peníze ....   

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Cruppy0
Newbie
10. 7. 2014   #7
-
0
-

:DDD

Nahlásit jako SPAM
IP: 88.103.3.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

Podobná vlákna

Virtuální friend funkce — založil Blujacker

Virtuální Metody — založil Sony

Virtuální adresář — založil Svist

Virtuální metody — založil Kenvelo

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý