játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5511
FZoli:    4894
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2529

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2198
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] > 5 < [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [143]
Instalok - Tag | 619 hsz       Online status #208620   2015.11.12 16:32 GMT+1 óra  
Hát, ezzel nagyjából ott vagyok, ahol eddig, minden esetre tanulságos ez a megoldás, lehet, hogy eszembe sem jutott volna. Pedig így megnézve logikus...

   
Asylum - Törzstag | 5511 hsz       Online status #208612   2015.11.12 09:45 GMT+1 óra  
A conceptek nem részei a szabványnak. Amúgy még így lehet megcsinálni:

http://stackoverflow.com/questions/2631585/c-how-to-require-that-one-template-type-is-derived-from-the-other

Tessék egy rövidebb verzió:

Kód:
template <class A, class B>
struct is_base_of
{
    static const int test(A*);
    static const short test(...);

    static B* get();

    enum { value = (sizeof(test(get())) == sizeof(int)) };
};

Ezt a hozzászólást Asylum módosította (2015.11.12 09:53 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #208606   2015.11.11 18:51 GMT+1 óra  
static_assert-en kívül van-e lehetőség template típusellenőrzésre? Azt szeretném megnézni, hogy az adott típus az gyereke-e egy másiknak. Természetesen csak és kizárólag compile-time. Hasonlóan, mint C#-ban a where feltétel generic esetén. Egyelőre csak ennyi van a függvény elején:
Kód:
static_assert(std::is_base_of<ComponentBase, T>::value, "Not a component!");

Olvastam valamit a Concept-ről, de az VS 2013 alatt (még?) nem működik, és nem szeretnék váltani, főleg nem emiatt.

   
Instalok - Tag | 619 hsz       Online status #208037   2015.08.02 08:57 GMT+1 óra  
Oké, ez jogos.

   
Asylum - Törzstag | 5511 hsz       Online status #208035   2015.08.02 08:39 GMT+1 óra  
Már hogy a fakkba ne lehetne

Kód:
// alma.cpp

class Alma
{
public:
    inline void Foo() {}
};


C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #208028   2015.08.01 19:33 GMT+1 óra  
Oké, hogy az egy hint, viszont ha nem a headerben van, akkor NEM LEHET inline. Néztem jó pár cikket ezzel kapcsolatban, és megállapították, hogy egyszerű getter/setter függvények esetén NAGYON sokat dob az inline.

C++ban meg nincs olyan, hogy property - vagy értsem ezalatt a getter/setter függvényeket?

   
Parallax - Tag | 609 hsz       Online status #208027   2015.08.01 19:30 GMT+1 óra  
Idézet
Instalok :
Ha nem a headerbe teszem a definíciót, akkor nem lehet inline. Szóval a kérdés még mindig áll. Inline esetén egyébként semmi nem kerül a dll-be, a fordító panaszkodik is, ha inline függvényt akarsz exportálni. Property?


Nincs olyan, hogy inline, ez csak egy kívánság, ami vagy teljesül, vagy nem. Cserébe viszont állandóan újra fog fordulni minden, amit érintenek ezek a fgv-ek. getter/setter = property.
Optimalizálni ott kell, ahol a program dolgozik, nem pedig mindent. Általában a program 10%-a fut az idő 90%-ban, itt kellene optimalizálni, nem feltétlen inline-ozással, ami mint írtam tetszőleges.

   
Instalok - Tag | 619 hsz       Online status #207987   2015.07.22 20:18 GMT+1 óra  
Ha nem a headerbe teszem a definíciót, akkor nem lehet inline. Szóval a kérdés még mindig áll. Inline esetén egyébként semmi nem kerül a dll-be, a fordító panaszkodik is, ha inline függvényt akarsz exportálni. Property?

   
Parallax - Tag | 609 hsz       Online status #207986   2015.07.22 19:09 GMT+1 óra  
Ha a headerbe teszed a kidolgozást is, akkor mi fordul a dll-be? cpp-ke rakd szerintem a property-ket is.

   
Instalok - Tag | 619 hsz       Online status #207983   2015.07.22 15:33 GMT+1 óra  
Ha egy dll-ként használható modult csinál valaki, akkor tervezés szempontjából melyik a szebb?
- az egyszerű get/set függvények inline függvények, azaz a headerben vannak definiálva
- még az akár 1 soros gettereknek is csak a deklarációja van a headerben, a definíció mindig a cpp fileban található (természetesen ez alól kivételek a template függvények, amelyek kötelezően a headerben találhatóak)

   
VMware28 - Tag | 2 hsz       Online status #207878   2015.07.02 09:52 GMT+1 óra  
Hello, Lead játékfejlesztőt keresek egy nemzetközileg elismert magyar játékfejlesztő céghez. Jó a fizu, jó a csapat. Szívességből írtam ide ki, hátha valakit érdekel. Ha igen, írj nekem az akos.szabadi@hotmail.com címre.

   
Parallax - Tag | 609 hsz       Online status #207778   2015.06.12 00:10 GMT+1 óra  
A program bonyolultságát nem az dönti el, hogy konzolos, vagy ablakos. Kompatibilitási okai vannak a konzolnak régi DOS-os programok miatt. Még ma is vannak olyan fejlesztői eszközök, amik DOS-os kimenetet állítanak elő a programnak pl.: Progress és a mai napig írnak ebben ügyviteli rendszereket kórházaknak stb. Játékfejlesztésnél igazából editornál használunk ablakos nyomógombos felületet, játéknál egy üres render ablak kell csak, amire OpenGL, vagy DirectX-el rajzolunk, a konzolos részt mondjuk logolásra lehet használni.

   
itamas - Tag | 136 hsz       Online status #207764   2015.06.08 19:00 GMT+1 óra  
Hát igen, az Assembly már eléggé hardverközeli nyelv, s valóban, arra mindenesetre jó volt a róla szóló könyv bújása, hogy megtudjam, mik azok a regiszterek, mitől 8, 16, 32 ... bites egy program vagy operációs rendszer (ekkora regisztereket bír kezelni, ha jól értelmeztem).
De a C++-ra visszatérve: a konzolos részét használva is lehet legalább olyan jó progikat készíteni, mint az ablakossal? Egyáltalán: miért van elkülönítve a két rész? Elvileg azért pakolja alapból teli a szerkesztőablakot ablakkezelő kódokkal az induláskor, hogy könnyítse a programozó dolgát - engem inkább elriaszt.
Asylum, jók a cikkeid (ezek alapján is fogok majd nekiállni a tanulásnak) és aranyos a hörcsögöd is.
   
Asylum - Törzstag | 5511 hsz       Online status #207763   2015.06.08 15:14 GMT+1 óra  
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Parallax - Tag | 609 hsz       Online status #207761   2015.06.08 13:16 GMT+1 óra  
A C/C++ (mert azért ez eggyütt használandó sok esetben) elég mély téma, igazán jól művelni sok év kérdése. Assembly-vel C++ állásinterjún szoktak szivatni, igazából nem is maga a nyelv, hanem a hardver ismeret a lényeg, hol mennyi elemi utasítást lehet megspórolni, a memória melyik részére teszi az adatot éppen a program, vagy melyik memóriába, "itt mit csinálhat a compiler" és hasonló kérdésekre tudsz válaszolni és aszerint programozni, vagy mások elszúrt programjait helyrehozni.

   
itamas - Tag | 136 hsz       Online status #207760   2015.06.08 12:57 GMT+1 óra  
Idézet
Nomad :
én egy kis bengabali vok de én tavaly előtt tanultam meg a c++-t internetes tutorialokból szerintem nem volt nehéz megtanulni úgyhogy szerintem nyugodtan kezdhet azzal az ember csak egy kis idő kell mire az ember elkezdhet opengl meg ilyen komolyabb dolgokkal foglalkozni...

Irigyellek, jóeszű gyerek lehetsz. Én pár hónapja beszereztem egy rakás programozási szakkönyvet, de még mindig ott tartok, hogy sehol. Igaz, nem is nagyon volt még időm gyakorolni, de talán most nyáron...
A C++-t hajtanám én is, mert úgy látom, ez a fórumtéma pörög itt a JF.hu-n, nem a sima C-s vagy C#-os, úgyhogy ebből azt szűrtem le, hogy ez a legalkalmasabb a játékfejlesztésre is.
Idézet

(az utóbbi 2 hónapban megtanultam az assembly-t)


Pedig az kemény dió lehet. És van egyáltalán valami létjogosultása az Assemblynek a mostani korszerű és korszerűsített programozási nyelvek között? Vagy azt is fejlesztették?
Annakidején megvettem Agárdy Gábor: Gyakorlati Assembly c. könyvének első kötetét; az eleje még érthető volt számomra kb. a szövegek kiíratásáig, de utána már mintha veszített volna a szájbarágósságából és nem sokat értettem belőle...
   
sasukekarakter - Tag | 16 hsz       Online status #207757   2015.06.06 14:02 GMT+1 óra  
Mivel ugyan az Mint a terep2 Remake-ek mely, CTruck3D vagy is ennek a játéknak
Simon_hasur fejlesztett ládásul köze van a c/c++, openGL Grafikával.


https://youtu.be/B74QvPGyBYM
   
proof88 - Törzstag | 530 hsz       Online status #207589   2015.05.07 21:26 GMT+1 óra  
Bocsi, ezt benéztem. Nem fogtam fel, hogy eleve azt írta, hogy "beépített típusokat".
   
Asylum - Törzstag | 5511 hsz       Online status #207588   2015.05.07 09:37 GMT+1 óra  
Erre gondoltam igen. Ha nem muszáj akkor ne adjunk puskát a programozó kezébe.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Matzi - Szerkesztő | 2529 hsz       Online status #207587   2015.05.06 23:26 GMT+1 óra  
Szerintem arra gondolt, hogy egy sima getter felesleges hogy const referenciát adjon vissza. Az esetek többségében egy sima érték visszaadás is elég, még akár gyorsabb is lehet a végeredmény. Míg ha egy const ref-re ha const castot hívsz, akkor settert csináltál a getterből. Nem szerencsés, még akkor sem ha a a "felhasználó" a hülye.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
proof88 - Törzstag | 530 hsz       Online status #207586   2015.05.06 22:15 GMT+1 óra  
Furcsállom Asylum hogy ezt írtad. A const az én szememben arra való, hogy megmondjuk a fordítónak, hogy mit nem szeretnénk módosítani, így ő vigyáz arra hogy véletlenül se tegyük meg, valamint hogy mit nem szeretnénk ha más módosítana. A const_cast az egy workaround arra hogy ha mégis módosítanánk erőszakkal, a lehetőség megvan, de az már szembeszegül az alkotó által felállított szabállyal, miszerint az ott const. Tehát a felelősség azé aki hülyeséget csinál. Ha egy objektumra szeretnék referenciát visszaadni, akkor inkább azt csinálnám, mint hogy érték szerint adjam vissza, nem? Ptr sem jobb ebből a szempontból. A cpp-ben mindenre van valami apró trükk, de érdemes bizonyos szabályokat betartani.
   
Instalok - Tag | 619 hsz       Online status #207585   2015.05.06 12:06 GMT+1 óra  
Aki const_castot ír, azt le kell lőni.

Egyébként ilyen szempontból ez mindennél probléma, amit nem érték szerint adsz át. Szóval nem kell const_castolgatni, és nincs gond. Egyébként változó, általában enumoknál, booloknál, meg ilyesmiknél érték szerint adom vissza.

   
Asylum - Törzstag | 5511 hsz       Online status #207584   2015.05.06 11:47 GMT+1 óra  
Btw. ilyet ne írj le...

Kód:
const int& getX()


Beépített típusokat mindig érték szerint, mert még a végén ráhív egy const_cast-ot és nézhetsz...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #207581   2015.05.05 13:03 GMT+1 óra  
Igen, mondjuk lehet, hogy úgy leszek az egésszel, hogy aki szétbirizgálja a headert, annak egészségére (rajtam kívül úgysem fogja használni senki ). Egyébként van forceinline, én a getterekhez azt használtam. Ha jól rémlik az olyasmi, hogy a fordító nem nagyon ellenőrzi le, hogy ez jogos-e inline-nak, hanem azt mondja, h "oké, akkor az lesz".

   
Asylum - Törzstag | 5511 hsz       Online status #207580   2015.05.05 12:34 GMT+1 óra  
Az inline is csak egy hint, semmi nem garantálja, hogy az lesz (dinamikus kötés esetén meg nem is lehet). Ha a fordító még fordítási időben ki tudja következtetni a típust, akkor inlineosíthatja persze.

Teljesítménykritikus dolgoknál le szokták szarni a tervmintákat. Pl. a GLM library csak headerökből áll, így az egész inlineolódik, de bárki belepiszkálhat (ez egyébként is saját felelősség...).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #207578   2015.05.05 11:56 GMT+1 óra  
Igen, mindkettő ismerős, de nem is gondolkoztam még rajta, hogy ezek valamelyikét használjam. Mármint vannak olyan esetek, amikor használtam, de azt inkább a platformfüggetlenség miatt tettem - például base graphics device osztály, majd abból származnak le a megfelelő osztályok.

Az interface dolog egyébként nekem tetszetősebb, viszont az inline így nem felejtős?
Kód:
// public header
class Base
{
public:
    virtual const int& getX() const = 0;
};

// private (lib) header
class Der : public Base
{
public:
    const int& getX() const { return x; } // override... inline?

private:
    int x;
};

   
Asylum - Törzstag | 5511 hsz       Online status #207577   2015.05.05 11:30 GMT+1 óra  
Interfész tervminta.

Kód:
// headerben:
class IMyInterface
{
protected:
    virtual ~IMyInterface();

public:
    virtual void PublicMethod1() = 0;
    virtual void PublicMethod2() = 0;
};

IMyInterface* CreateInterface();

// lib-ben:
class MyInterfaceImpl : public IMyInterface
{
private:
    // adattagok

public:
    void PublicMethod1() override;
    void PublicMethod2() override;
};


IMyInterface* CreateInterface()
{
    return new MyInterfaceImpl();
}


Ez az egyik megoldás és kicsit zanzásított. Általában nem lehet rá delete-et hívni, hanem van egy Release() metódusa.

A másik megoldás a pimpl idiom (híd tervminta).

Kód:
// headerben:
class MyInterfaceImpl;

class MyInterface
{
private:
    // hiába teszi publikká, nem tud ráhívni semmit
    MyInterfaceImpl* impl;

public:
    MyInterface();
    ~MyInterface();

    void PublicMethod1();
    void PublicMethod2();
};

// libben:
class MyInterfaceImpl
{
public:
    void PublicMethod1();
    void PublicMethod2();
};

MyInterface::MyInterface()
{
    impl = new MyInterfaceImpl();
}

MyInterface::~MyInterface()
{
    delete impl;
}

void MyInterface::PublicMethod1()
{
    impl->PublicMethod1();
}

void MyInterface::PublicMethod2()
{
    impl->PublicMethod2();
}


Ennek az az előnye, hogy elég automatikus változóként deklarálni (MyInterface interf; )

Ezt a hozzászólást Asylum módosította (2015.05.05 11:51 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #207576   2015.05.05 09:44 GMT+1 óra  
Van két projektem. Az egyik egy static libként fordul, a másik pedig futtathatóként. A static libet hozzálinkelem a futtathatóhoz. Eddig szuper minden, azonban, hogy használhassam a static libet megfelelően, szükségesek annak a headerjei. Viszont szeretném, ha bizonyos függvények és egyebek nem lennének elérhetőek a liben kívülről, azaz a futtatható ne férhessen hozzájuk. Lehet private dologgal szórakozni, azonban, mivel a headert mellékelni kell, így az könnyen módosítható, és talán public/private csere esetén még újrafordítani sem kell.

Hogy lehetne azt szépen megoldani, hogy csak az általam kijelölt memberek legyen elérhetőek?

   
Asylum - Törzstag | 5511 hsz       Online status #207551   2015.04.27 19:37 GMT+1 óra  
Szerintem meg beadandó vmelyik suliba...

Kód:
struct Arfolyam
{
    double E;
    double C;
    int nap;
};

Arfolyam arfolyamok[31] =
{
    { 293.50, 242.33, 1 },
    { 291.33, 243.55, 2 },
     // stb.
};

rendez(arfolyamok);
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Geri - Törzstag | 2198 hsz       Online status #207550   2015.04.27 18:37 GMT+1 óra  
az, úgy érzem, hogy ez megint egy újabb glcreatemmorpg-harcosos sztori lesz

   
Bani05 - Tag | 3 hsz       Online status #207548   2015.04.27 18:19 GMT+1 óra  
És akkor ezt a rendezést ez alapján hogyan kellene átírni? nem akar sikerülni:
double seged;
int j;
for (i = 0; i < 30; i++)
{
for (j = i + 1; j < 31; j++)
{
if (E[ i ]>E[ j ])
{
seged = E[ i ];
E[ i ] = E[ j ];
E[ j ] = seged;
}
}
}

for (i = 0; i < 3; i++)
{
cout << E[ i ] << " ";
}

   
Elodin - Tag | 184 hsz       Online status #207546   2015.04.27 17:33 GMT+1 óra  
Miért nem építesz az elején egy tömböt az indexekből (x. elem = x).
Rendezés közben ebbe a tömbe is cseréld az elemeket párhuzamosan a másikkal, így a végén ki tudod olvasni az eredeti indexeket....

   
Instalok - Tag | 619 hsz       Online status #207545   2015.04.27 17:33 GMT+1 óra  
Az sem gond, csak figyelni kell rá, hogy legfeljebb 3-mat gyűjtsön össze. Ha megvan a 3 legjobb, utána sorrendben meg lehet keresni az adott tömb(ök)ben, hogy az mely indexen van. Ha több helyen is, akkor annyival csökken a megkeresendő elemek száma.

   
Geri - Törzstag | 2198 hsz       Online status #207544   2015.04.27 17:19 GMT+1 óra  
az úgy nem jó, mert mi van, ha több napon is ugyanaz volt az árfolyam?

   
Tunyu - Tag | 450 hsz       Online status #207543   2015.04.27 16:04 GMT+1 óra  
Ha növekvő sorrendbe raktad, utána az első hármat összehasonlítod az eredeti listában levő értékekkel és ha egyezik akkor megvan az indexe is.

   
Bani05 - Tag | 3 hsz       Online status #207542   2015.04.27 15:06 GMT+1 óra  
Én is erre gondoltam de a napok azok az árak indexei és ha rendezem az árakat akkor az első 3ár ami kell, értelemszerűen a 0,1,2 indexet kapja de nekem meg ugye az eredeti indexek kellenének. Bár vszínű hogy ez a járható út csak nem tudom, hogy lehetne indexxel együtt rendezni.

   
Asylum - Törzstag | 5511 hsz       Online status #207541   2015.04.27 13:55 GMT+1 óra  
a napokat is rendezd az árfolyammal együtt
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Bani05 - Tag | 3 hsz       Online status #207540   2015.04.27 13:39 GMT+1 óra  
Sziasztok!
Tudna valaki segíteni ebben a feladatban?
Adott az EUR és CHF párhuzamos tömbökben a március hónap 31 napi Euro és svájci frank átlag árfolyam forintban (HUF):

double E[31] = { 293.50, 291.33, 292.40, 293.25, 291.76, 283.83, 285.94, 295.65, 282.63, 279.85, 277.06, 274.87, 292.18, 270.39, 268.45, 264.91, 291.28, 260.24, 259.48, 258.73, 264.94, 263.37, 266.66, 269.45, 270.93, 275.83, 278.94, 281.38, 291.28, 293.56, 294.05 };
double C[31] = { 242.33, 243.55, 244.02, 237.65, 241.67, 244.88, 243.87, 239.76, 240.23, 238.24, 239.55, 242.01, 241.49, 242.56, 245.28, 250.56, 252.18, 255.89, 260.24, 263.72, 261.52, 258.31, 254.93, 251.28, 249.84, 250.17, 248.73, 246.83, 244.67, 247.38, 243.56 };

e) A hónap melyik három napja volt a legjobb Euro vásárlásához? Milyen Euro és svájci frank árfolyamok voltak ezeken a napokon?

Odáig jutottam el hogy növekvő sorrendbe állítom az eurós tömböt és akkor ugye az első 3 elem lesz ami kell, de így még mindig nem tudom hogy az a 3 ár melyik napokon volt.

   
M4 - Tag | 187 hsz       Online status #207001   2015.03.12 09:52 GMT+1 óra  
Idézet
sasukekarakter :
de abba kell a segítség autó modellt hogyan csináljak az OpenGL segítségével
Mint a terep2-ben?


Opengl-ben minden háromszögekből épül fel. Az meg csúcsokból. Vagyis az opengl-nek meg kell adni egy csúcspontokból álló listát. Majd egy index listát, ami megmondja mely csúcsok alkotnak háromszöget. Ez azért jó, mert így a szomszédos háromszögnél nem kell a közös csúcsokat többször megadni.
A csúcsoknak lehet tulajdonságokat megadni, szín, pozíció stb. De lehet egyszerűbb egy 3D modellező programmal pl Blender.

   
sasukekarakter - Tag | 16 hsz       Online status #206998   2015.03.12 09:33 GMT+1 óra  
Idézet
Instalok :
glezmen
Minden rossz szandek nelkul, szerintem lassits
Eloszor az alapokkal ismerkedj, ne akarj azonnal vilagot megvaltani




Oké
   
Instalok - Tag | 619 hsz       Online status #206996   2015.03.12 08:24 GMT+1 óra  
glezmen
Minden rossz szandek nelkul, szerintem lassits
Eloszor az alapokkal ismerkedj, ne akarj azonnal vilagot megvaltani

   
sasukekarakter - Tag | 16 hsz       Online status #206995   2015.03.12 03:28 GMT+1 óra  
Köszönöm mindenkinek!
hogy mindenki segített a c++ programozásra néhányat meg tanultam
de abba kell a segítség autó modellt hogyan csináljak az OpenGL segítségével
Mint a terep2-ben?

Amúgy code::blockot használok mert linux ubuntut van
a nagy gépemen
   
Instalok - Tag | 619 hsz       Online status #206981   2015.03.10 20:00 GMT+1 óra  
Végül is lehet benne valami. Ha a D osztályt a C részeként tekintjük (mint mondjuk egy függvényét), akkor logikusnak tűnik, hogy miért látja. Mivel azt mondjuk, hogy a B friendje a C (azaz C és annak "részei" látják a B privát adattagjait is), így a D, mint C része is látni fogja a B nem publikus adattagjait is. Először ez így nem esett le, és picit furcsáltam.

   
Asylum - Törzstag | 5511 hsz       Online status #206980   2015.03.10 19:15 GMT+1 óra  
szerk.: a foo() nem kéne menjen, ez bug...
szerk.: g++ al is fordul, wow oO

Ezt a hozzászólást Asylum módosította (2015.03.10 19:26 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Instalok - Tag | 619 hsz       Online status #206966   2015.03.09 13:23 GMT+1 óra  
Ez tényleg logikusnak tűnik.

   
Eldor - Tag | 163 hsz       Online status #206965   2015.03.09 13:07 GMT+1 óra  
Ha belegondolsz, akkor logikus a működése. A C osztály elérheti a B osztály privát adattagját az által, hogy frienddé teszed. Mivel D a C osztály része, ezért az is elérheti B privát adattagját.

   
Instalok - Tag | 619 hsz       Online status #206964   2015.03.09 12:13 GMT+1 óra  
Pedig szerintem azért hasznos, ha van ilyesmi. Gondolj csak bele: van egy osztályod, rengeteg public memberrel, de nem szeretnéd, hogy, ha valakinek van egy példánya, akkor azt fel tudja szabadítani. Vagy eleve meg szeretnéd gátolni, hogy létrehozhasson egyet, lásd: singleton pattern.

Minden esetre nem zárkózom el az áttervezéstől sem, a kódomban elég sok helyen használom a friendet, mivel nem ismerek olyan patternt, ami ezt a működést adná "szépen".

   
__z - Tag | 78 hsz       Online status #206963   2015.03.09 11:33 GMT+1 óra  
Instalok :
Ez csak magánvélemény, de szerintem megér egy próbát, hogy elfelejted a "friend" kulcsszót, és megpróbálod újragondolni a kódot anélkül - lehet, hogy a probléma önmagától megoldódik. Egyébként szerintem nem véletlen, hogy sok nyelv nem alkalmaz hasonló funkciót...
   
Instalok - Tag | 619 hsz       Online status #206962   2015.03.09 11:17 GMT+1 óra  
Példányosítva van minden, még BP-t is tettem oda, bele is megy, és működik is. A friend okozza, csak nem értem, hogy miért.

Itt egy mini-példa, önmagában fordítható. Nálam ez fordul, fut, működik.
Kód:
#include <iostream>

class C
{
public:
    class B
    {
        friend class C;

    protected:
        B() { }
        virtual ~B() { }

        virtual void foo() = 0;

    private:
        int a;
    }; // class B

    class D : public B
    {
        friend class C;

    private:
        D() { }
        ~D() { }

        virtual void foo()
        {
            a = 10;
        }
    }; // class D

    C()
    {
        D d;
        d.foo();
        std::cout << d.a;
    }
}; // class C

   
Asylum - Törzstag | 5511 hsz       Online status #206961   2015.03.09 10:55 GMT+1 óra  
Amíg nem példányosítasz egy metódust, addig nem fog kiderülni a fordítási hiba.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] > 5 < [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [143]