Pereiti prie turinio

Rekomenduojami pranešimai

Gelbėja nuo ne to konstruktoriaus iškvietimo, kurio nereikia, neleisdamas tau iškviesti to konstruktoriaus atitinkamomis sąlygomis. Manau sunkoka būtų rasti klaidą, jeigu iš dviejų panašių konstruktorių iškviestum ne tą, o tada kodas lyg ir veikia, bet lyg ir ne :).

 

pvz.


#include <iostream>
#include <string>

using namespace std;

class Obj
{
   public:
       explicit Obj(int a)
       {
           eilute = "int";
       }
       explicit Obj(char a)
       {
           eilute = "char";
       }
       string eilute;
};


int main()
{
   Obj a = 's'; // Mes errora, bet jeigu nuimtum explicit nuo Obj(int), tai iškviestum Obj(int), nes tai būtų leidžiama.
   Obj a ('s'); // Obj(char). Šitaip iš viso geriausia inicijuoti objektus, nebus sunkiai surandamų klaidų, jei jų pasitaikys
   cout << a.eilute;
}


Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gelbėja nuo ne to konstruktoriaus iškvietimo, kurio nereikia, neleisdamas tau iškviesti to konstruktoriaus atitinkamomis sąlygomis. Manau sunkoka būtų rasti klaidą, jeigu iš dviejų panašių konstruktorių iškviestum ne tą, o tada kodas lyg ir veikia, bet lyg ir ne :).

 

pvz.


#include <iostream>
#include <string>

using namespace std;

class Obj
{
   public:
       explicit Obj(int a)
       {
           eilute = "int";
       }
       explicit Obj(char a)
       {
           eilute = "char";
       }
       string eilute;
};


int main()
{
   Obj a = 's'; // Mes errora, bet jeigu nuimtum explicit nuo Obj(int), tai iškviestum Obj(int), nes tai būtų leidžiama.
   Obj a ('s'); // Obj(char). Šitaip iš viso geriausia inicijuoti objektus, nebus sunkiai surandamų klaidų, jei jų pasitaikys
   cout << a.eilute;
}


Sunkoka rasti klaidą?.. Kurioje vietoje čia bent kažkas sudėtingo?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Čia pavyzdys yra, o ne kodas iš realaus projekto. Savaime aišku, kad čia lengva.

/facepalm

 

Dar kartą kartoju - kurioje vietoje sunku surasti klaidą su keliais konstruktoriais? Debuginimo metu next step numes į kviečiamą konstruktorių. 'Go to definition' ar pan. IDE funkcija numes į reikiamą konstruktorių. Dievaž, du tokie patys konstruktoriai negali būti, tai bent jau akytes turi ir pasižiūrėsi - aha, čia su vienu char kviečiamas konstruktorius, einam į klasės failą - aha, šitas konstruktorius su dviem char tipais, tai ar čia man reikalingas konstruktorius? GUESS NOT LOL MY DEDUCTION CAPABILITIES SAVED ME ONCE AGAIN LOL!

Nuoroda į pranešimą
Dalintis kituose puslapiuose

/facepalm

 

Dar kartą kartoju - kurioje vietoje sunku surasti klaidą su keliais konstruktoriais? Debuginimo metu next step numes į kviečiamą konstruktorių. 'Go to definition' ar pan. IDE funkcija numes į reikiamą konstruktorių. Dievaž, du tokie patys konstruktoriai negali būti, tai bent jau akytes turi ir pasižiūrėsi - aha, čia su vienu char kviečiamas konstruktorius, einam į klasės failą - aha, šitas konstruktorius su dviem char tipais, tai ar čia man reikalingas konstruktorius? GUESS NOT LOL MY DEDUCTION CAPABILITIES SAVED ME ONCE AGAIN LOL!

 

Nevisada naudojamas kodas yra tavo kodas, todėl debuginti nevisada yra variantas, kartais tiesiog negali, būna tokių situacijų sočiai. Manau implementerio atveju explicit panaudoti ir užkirsti kelią tokioms klaidoms yra būtinybė, klientas nežinos kuom skiriasi tie konstruktoriai, jei dokumentacija ir prototipas nieko nepasakys (nors tikrai turėtų). Implementerio uždavinys visada yra rašyti funkcionalų ir paprastai naudojamą kodą. Išleisi tarkim closed source API, ir planuoji debug simbolius įkompiliuoti, kad pažiūrėtų klientas kuris konstruktorius iškviečiamas? Nemanau. Taigi prieš įžūliai atsakydamas, pagalvok apie daugiau atvejų. Kadangi programuotojas esi, pasuk smegeninę outside the box, taip pat manau žinai, kad yra daug būdų apeiti problemą, nebūtinai explicit, nebūtinai koks kitas sprendimas, tik nebūk įsitikinęs, kad surasti kuris konstruktorius iškviečiamas absoliučiai visada paprastas, nes taip tikrai nėra.

Redagavo DevBlox
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nevisada naudojamas kodas yra tavo kodas, todėl debuginti nevisada yra variantas, kartais tiesiog negali, būna tokių situacijų sočiai. Manau implementerio atveju explicit panaudoti ir užkirsti kelią tokioms klaidoms yra būtinybė, klientas nežinos kuom skiriasi tie konstruktoriai, jei dokumentacija ir prototimas nieko nepasakys (nors tikrai turėtų). Implementerio uždavinys visada yra rašyti funkcionalų ir paprastai naudojamą kodą. Išleisi tarkim closed source API, ir planuoji debug simbolius įkompiliuoti, kad pažiūrėtų klientas kuris konstruktorius iškviečiamas? Nemanau. Taigi prieš įžūliai atsakydamas, pagalvok apie daugiau atvejų. Kadangi programuotojas esi, pasuk smegeninę outside the box, taip pat manau žinai, kad yra daug būdų apeiti problemą, nebūtinai explicit, nebūtinai koks kitas sprendimas, tik nebūk įsitikinęs, kad surasti kuris konstruktorius iškviečiamas absoliučiai visada paprastas, nes taip tikrai nėra.

O kas būtų, jei bobutė būtų su kiaušais?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...