Třídy, dědičnost ? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Třídy, dědičnost ? – C / C++ – Fórum – Programujte.comTřídy, dědičnost ? – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
aTTix0
Návštěvník
13. 10. 2009   #1
-
0
-

Zdravím, mám problém s třídou, potřebuju "nasdilet" hodnoty z jedne metody do druhe.. Tady je kód :

class Game {

private:

public:
void graphics(int screen_w, int screen_h, str name);
void inframe();
void init();
void copyent(TEntity ent1,TVec3 position);
};

void Game::graphics(int screen_w, int screen_h, str name) {

Initialize();

SetAppTitle(name);

Graphics(screen_w, screen_h);
}

void Game::init() {

CreateWorld();

TCamera cam = CreateCamera();
TMesh cu = CreateCube();


MoveEntity(cam,Vec3(0,0,-5));

PositionEntity(cu, Vec3(1.5, 0, 0));

Game::copyent(cu, Vec3(-1.5, 0, 0));
Game::copyent(cu, Vec3(-3, 0, 0));

}

void Game::copyent(TEntity ent1, TVec3 position) {
TEntity zent = CopyEntity(ent1);
PositionEntity(zent, position);
}

void Game::inframe() {
while(!KeyHit(KEY_ESCAPE) && !AppTerminate()) {


MoveEntity(cu, Vec3(0.02, 0, 0));

UpdateWorld();

RenderWorld();

Flip(0);
}

Terminate();
}


Tučné "hodnoty" z metody init() potřebuju mít ve třídě inframe(), ale nechci abych každý "obejkt" (napr. TMesh) musel zapisovat do třídy do Private/Public: ... Šlo by nějakým způsobem udělat, aby metody inframe() zdědila objekty z init() ? Předem děkuji za odpověd

Nahlásit jako SPAM
IP: 88.100.180.–
Reklama
Reklama
ondra.holub
~ Anonymní uživatel
253 příspěvků
14. 10. 2009   #2
-
0
-

Tak jsem sem 5 minut psal odpověď i s příkladem. Bohužel se to tu neobjevilo, protože když jsem to psal, byl jsem přihlášený, ale po odeslání se tento systém asi rozhodl, že zrovna přihlášený nejsem. A tudíž jsem nevyplnil ten kvíz s dotazy, jestli spamuji apod. A proto se ten příspěvek asi nepřidal. Náhled samozřejmě nefunguje (pokud tedy požadovaná funkcionalita není smazání toho, co jsem napsal).

O kvalitě svědčí i ta záhadná preference dotazu Probel se zapisem do souboru http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=12896-probel-se-zapisem-do-souboru , do kterého už tři měsíce nikdo nic nenapsal, ale pořád je nejnovější.

Kvízy vyplňovat nebudu, proto jsem přihlášen. O mé odpovědi systém nestojí, takže nezbývá, než zůstat u diskusí na http://forum.builder.cz/list.php?123 , které fungují.

Nahlásit jako SPAM
IP: 194.138.12.–
KIIV+42
God of flame
14. 10. 2009   #3
-
0
-

To ondra.holub : a co pouzivas za browser? nemeni se ti behem toho ip? nemazes cookies?
me se nikdy nic podobneho nestalo.. jedine co se mi stane, kdyz pretahnu notebook jinam .. tak me to odhlasi

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV+42
God of flame
14. 10. 2009   #4
-
0
-

To aTTix : zkusil sis ty promenne dat taky do private: sekce? pak sou "videt v objektu"

class Game {


private:
TCamera cam;
TMesh cu;


public:

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub
~ Anonymní uživatel
253 příspěvků
14. 10. 2009   #5
-
0
-

To KIIV : Firefox 3.5.3 nebo IE 6.x. Je to jedno, prohlížečem to asi není. Psal jsem adminům, dělá mi to jenom tady. A asi to nedělá nikomu jinému. IP adresa by se měnit neměla.

Nahlásit jako SPAM
IP: 194.138.12.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
14. 10. 2009   #6
-
0
-

Pokud nechceš, aby ta data byla vidět headeru, tak to můžeš udělat takto:

// Soubor trida.hpp

class Trida
{
public:
Trida();
Trida(const Trida& src);
~Trida();

Trida& operator=(const Trida& src);

private:
struct PrivateData;
Private Data* p_;
};

// soubor trida.cpp

struct Trida::PrivateData
{
PrivateData()
{
}

// Spravny copy constructor je nutny pro spravnou funkci
// copy construktoru a operatoru = ve tride Trida
// Jinak neni potreba
PrivateData(const PrivateData& src)
{
}
};

Trida::Trida()
: p_(new PrivateData())
{
}

Trida::Trida(const Trida& src)
: p_(new PrivateData(*src.p_))
{
}

Trida::~Trida()
{
delete p_;
}

Trida& Trida::operator=(const Trida& src)
{
if (this != &src)
{
delete p_;
p_ = new PrivateData(*src.p_);
}

return *this;
}

Nahlásit jako SPAM
IP: 194.138.12.–
ondra.holub+1
Stálý člen
14. 10. 2009   #7
-
0
-

To Anonymní uživatel : No vida, jak se to vložilo napoprvé, i když jako anonym.

Nahlásit jako SPAM
IP: 194.138.12.–
aTTix0
Návštěvník
14. 10. 2009   #8
-
0
-

děkuji za příklady, ikdyž nevím zda ten druhý (dlouhý) je přesně to co potřebuju.. Potřebuju aby data které definuju v metodě třídy, byla "vidět" i v jiných metodách té třídy, bude ten příklad,co jsi mi poslal, takhle fungovat ?

Nahlásit jako SPAM
IP: 88.100.180.–
KIIV+42
God of flame
14. 10. 2009   #9
-
0
-

To aTTix : co takhle precist si neco o OOP a pak teprve pokladat otazky...
je to tak, jak sem napsal v jednom z prispevku...
private - v ramci objektu jsou globalni.. nejde pristupovat z venku - tj. nejde udelat mujobjekt.promenna = 1;
ale pro objekt je to V KAZDE METODE pristupne (pokud si to nepredefinujes nejakou lokalni promennou stejneho nazvu)

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
aTTix0
Návštěvník
14. 10. 2009   #10
-
0
-

To KIIV : ano ano, to vím.. Asi jsem to špatně napsal :

nechci abych každý "objekt" (napr. TMesh) musel zapisovat do třídy do Private/Public



Jde mi o to abych to mohl definovat z jákekoliv metody pro všechny metody ve třídě

Nahlásit jako SPAM
IP: 88.100.180.–
KIIV+42
God of flame
14. 10. 2009   #11
-
0
-

To aTTix : neznam takovy zpusob.. jeste jde pouzit modifikator static ale ten je jen v ramci te jedne metody ktera to udela..

bud to das jako globalni v objektu - tj public/private nebo jako globalni v ramci programu, coz je uz naprosto mimo zasady OOP

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
aTTix0
Návštěvník
15. 10. 2009   #12
-
0
-

To KIIV : dobře, děkuju, já právě neveděl jestli něco takového by šlo, budu se prostě muset spokojit s tím co jde :P

Nahlásit jako SPAM
IP: 88.100.180.–
KIIV+42
God of flame
15. 10. 2009   #13
-
0
-

To aTTix : nevim proc vlastne kazdej zacatecnik vzdy hleda super duper reseni, kdyz pro zacatek staci cokoliv

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
aTTix0
Návštěvník
16. 10. 2009   #14
-
0
-

To KIIV : protože jako začátečník jsem zvědavej a rád experimentuji

Nahlásit jako SPAM
IP: 88.100.180.–
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, 64 hostů

Moderátoři diskuze

 

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