C++ kérdések

Kezdőlap Fórumok Programozás C++ kérdések

10 bejegyzés megtekintése - 1-10 / 120
  • Szerző
    Bejegyzés
  • #2023668
    pointux
    Felhasználó

      A c++-nak van néhány kellemetlen korlátja.
      Pl.: amíg nem tültöd be az objektumot, addig nem is létezik (kiv. ha statikus).
      (

      #2023669
      roante
      Felhasználó

        Copykonstruktorod van? Sztem azzal kiküszöbölhetõ lenne a probléma …

        #2023670
        Leslieman
        Felhasználó

          Pont ezt akartam javasolni én is. 😀
          Különben nem próbáltam ki, hogy a copyconstructor használata esetén meghívódik-e az alap konstruktor, de majd talán este megnézem.
          Ha nem, akkor pl lehetne egy jelzõ bitet harcba állítani, ami jelzi, hogy lefutott-e az alap inicializálás. Ha nem, akkor meghívod a megfelelõ rutinokat, majd átállítod a bitet pl.
          Persze ismerni kellene a forrást, további okoskodáshoz 🙂 .

          #2023671
          kl223
          Felhasználó

            Hm…. kösz a segítséget, de elegem lett az operátorokból… 🙂
            Inkább megoldom fgv-kkel, nem érdekel.

            Viszont lenne egy újabb kérdésem is, bár kissé offtopik ebben a témában:

            szerk: nah picit megszerkesztettem a téma címét, mostmár nem offtopik… 😛

            Szeretnék a progimhoz egy testreszabható kis saját készítésû loggert készíteni.
            Felmerült bennem pár kérdés…. pl:

            1) Csinálhatnék singleton osztályt, benne vmi iesmi fgv-vel:

            Code:
            void log( std::string txt );

            Ennek van pár hátránya: szeretném használni pár objektum << operátorát. (amivel maga az objektum kiírja saját magát egy ostream-ba) 2) Tehát a progin belül vmi iesmi használatot szeretnék:

            Code:
            logger log( „fajlneve” );
            // vagy esetleg: logger log; => ekkor cout-ra loggol

            AkarmiObjektum o;
            //…
            log << "Naplózzuk ezt az objektumot: " << o;

            Ehhez viszont nem ártana, ha a logger osztály örököl az ostream osztályból, ha jól sejtem. (Mivel az operator<< metódusok ostream objektumokkal dolgoznak.) Viszont ez esetben nem ártana tudni, hogy az ostream osztályból hogy is kéne örökölni?
            Illetve úgy általában a fent mutatott használathoz miket kéne felülírni az ostream osztályban, etc…

            Megnéztem az ostream kódját, de nem sokat fogtam fel belõle így elsõre…. ezért kérek vmiféle ötletet.

            Tehát lényegében egy saját kis testreszabható, illetve változtatható célpontú streamobjektum létrehozását szeretném megvalósítani, és naon rég c++oztam szal egyelõre nem vagyok benne a dolgokban sajna…

            Kösz elõre is minden segítséget…

            kl223

            #2023672
            kl223
            Felhasználó

              Copykonstruktorod van? Sztem azzal kiküszöbölhetõ lenne a probléma …
              [align=right][snapback]143004[/snapback][/align]

              Hm. Nem annyira vok jártas cppben. Hogy is néz ez ki?
              Mert egy ienre:

              Code:
              class akarmi {
                 public:
                     akarmi( akarmi _src );
              };

              azt írja, hogy szabálytalan, és szerinte inkább ezt akartam írni:

              Code:
              akarmi( akarmi &_src );

              ez utóbbi viszont nem hajtódik végre mint copy konstruktor vagy mifene… nemtom… volt ott mindig pár error. Nyilván, ez ugye az cím szerinti átadás, nem ugyanaz.

              Vélemény?

              #2023673
              kl223
              Felhasználó

                „Szvsz elég kellemetlen. Kérdésem a következõ: van rá vmi mód, hogy érzékeljük, ha egy változó még inicializálatlan?”
                Ez nem jó út mert az inicializálatlan változó nem más mint egy lyuk a programban:
                0000:ugras a 00FF cimre

                00FF:program_tovabbi_resz
                Közötte meg a változó. Ami jó esetben 0-val van feltöltve (de még ez sem biztos…ha dinamikus).
                [align=right][snapback]142408[/snapback][/align]

                hja, ezt tudtam. erre épülnek a buffer overflow-típusú exploitok.

                kl223

                #2023674
                roante
                Felhasználó

                  Szerintem nem kell neked itt származtatgatnod az ostream-bõl 🙂

                  A c++ engedi a különbözõ operátorok túlterhelését, így a << operátort is, ami azért valljuk be, elég hasznos tud lenni ( Javában ezt nagyon hiányolom 🙁 ). Viszont ha nem tudod a szignatúráját, akkor célravezetõbb lenne egy sima "log" mûveletet írni a szükséges objektumokra.

                  #2023675
                  kl223
                  Felhasználó

                    Szerintem nem kell neked itt származtatgatnod az ostream-bõl 🙂

                    A c++ engedi a különbözõ operátorok túlterhelését, így a << operátort is, ami azért valljuk be, elég hasznos tud lenni ( Javában ezt nagyon hiányolom :-( ). Viszont ha nem tudod a szignatúráját, akkor célravezetõbb lenne egy sima "log" mûveletet írni a szükséges objektumokra.
                    [align=right][snapback]144948[/snapback][/align]

                    Naigen. Nade hogy néz ez ki? 😉
                    Bár mind1, valszeg úgy lesz megoldva, meg singletonnal…
                    csak majd picit felfejlesztem. (pl loggolás több helyre, etc)

                    Javában az operátorok felüldefiniálása hiányzik naon, bár ha az ember megszokja ezeket az isEquals meg charAt, meg hasonló mûveleteket, utána nem oan zavaró. Az 1 dolog, hogy így elsõ ránézésre is érti az emberfia, mit is csinálok…

                    kl223

                    #2023676
                    manni
                    Felhasználó
                      kl223 wrote:
                      Mert egy ienre:

                      Code:
                      class akarmi {
                          public:
                              akarmi( akarmi _src );
                      };

                      azt írja, hogy szabálytalan, és szerinte inkább ezt akartam írni:

                      Code:
                      akarmi( akarmi &_src );

                      ez utóbbi viszont nem hajtódik végre mint copy konstruktor vagy mifene… nemtom… volt ott mindig pár error. Nyilván, ez ugye az cím szerinti átadás, nem ugyanaz.

                      Vélemény?

                      #2023677
                      pointux
                      Felhasználó
                        Code:
                        class akarmi {
                            public:
                                akarmi( akarmi _src );
                        };

                        Eleve nem jöhet létre, hiszen a definiáláskor még nem létezik az objektum a létrehozásakor pedig ismerni kéne a fordítónak a méretet. Ami jelen esetben, mivel végtelen nem lehet, elõbb utóbb a maximálissal lesz egyenlõ, de meghatározhatatlan.

                        Helyesen:

                        Code:
                        class akarmi {
                            public:
                                akarmi(  );
                                akarmi( akarmi& );
                                akarmi( const akarmi& );
                        };
                      10 bejegyzés megtekintése - 1-10 / 120
                      • Be kell jelentkezni a hozzászóláshoz.