Constructor implicit?
Last Updated: Aug 04 2015 12:42, Started by
bluething
, Aug 03 2015 16:55
·
0
#1
Posted 03 August 2015 - 16:55
Salutare tuturor.
Imi poate explica cineva ce este mai exact un constructor implicit? Deoarece aparent atat pe internet cat in diverse carti, parerile sunt impartite in doua tabere: fie e constructorul creat de compilator atunci cand programatorul nu a definit unul, fie este definit de programator cu argumente implicite, de genul (exemplu dintr-o carte): class Persoana{ private: char nume[40]; long int telefon; public: Persoana(char *n="Numele", long int t=1432); } |
#2
Posted 03 August 2015 - 17:03
In ce limbaj? C++?
Deaia nu inveti programare din carti in romana. Exista conceptul de "default constructor" si "implicit constructor", care pun pariu ca nu sunt traduse corect in romana. Ala cu parametrii fix proprietatile private definite inainte nu are niciun nume special. Edit: termenul de constructor implicit poate si el sa fie confundat cu ideea de "implicit constructor call", adica presupunand ca ai si un default constructor (ala fara parametrii) poti spune "Persoana p;" care e tot una cu "Persoana p();". Edited by sergiu_spooky, 03 August 2015 - 17:05. |
#3
Posted 03 August 2015 - 17:07
Pentru C++ e cartea facuta, da.
In cartea din care am dat exemplul sunt listate urmatoarele tipuri de constructori: - implicit (fara argumente sau argumente implicite) - de copiere - de conversie - general Problema e ca nu explica prea pe larg, iar eu din cunostiintele mele stiu ca implicit se refera la cel furnizat de compilator, indiferent ca vorbim de constructor, destructor, etc. Edited by bluething, 03 August 2015 - 17:08. |
#4
Posted 03 August 2015 - 17:18
am clasa:
class Persoana { private: string nume; public: Persoana() { nume = "Gigel"; } string getPersoana() { retun this.nume; } }Persoana p = new Persoana(); sau ma rog Persoana p; Daca dupa faci p.getNume(); ar trebui sa iti arate gigel. Ca ai setat IMPLICIT (default) ca numele sa fie gigel atunci cand instantiezi un obiect fara sa-i dai parametri. Nu mai stiu C++, posibil sa fi incurcat sintaxa cu cea de java dar sper ca intelegi ideea. |
#5
Posted 03 August 2015 - 17:20
No, lucrurile _in engleza_ sunt cam asa:
- default constructor: orice constructor pe care-l poti apela fara argumente. Adica si unul care are default values pentru parametrii; - implicit constructor: un default constructor definit automat (implicit) de complilator daca nu ai definit tu (programatorul) unul; - copy-initialization (constructor "de copiere"): Test t2 = t1; unde t1 e tot instanta de Test; - converting constructor: orice constructor care primeste un parametru. Stiu, cam generala definitia ) Ideea e ca ai Test(int i) pe care-l folosesti ca Test t = Test(3); care inseamna ca ai "convertit" 3 din int in Test. Constructorul "de copiere" e si el un converting constructor, care converteste dintr-un tip in acelasi tip Repet, nu mai invata programare in romana. E o greseala. In primul rand pentru ca toata documentatia _relevanta_ de pe internet e in engleza. In al doilea rand pentru ca, la randul lor, si aia care-or scris cartile in romana pana la urma le-or tradus din engleza. Fie direct (plagiat) fie indirect (or invatat in engleza si 10 ani mai tarziu incearca sa exprime ideile din mintea lor in romana). Si o fac foarte prost. Daca scrie pe undeva in cartea aia a ta "argumente implicite" atunci opreste-te ) Nu exista asa ceva. Exista default arguments. Default nu e tot una cu implicit in engleza. Edited by sergiu_spooky, 03 August 2015 - 17:26. |
#7
Posted 03 August 2015 - 18:16
Daca tot suntem in tema aici; o alta nelamurire pe care o am este legata de lista de instantiere/initializare. La fel, nu inteleg daca-s la fel, daca sunt diferite, daca da, care-i diferenta. Din ce am citit in engleza nu pare sa fie diferente intre cele doua, in romana n-am gasit mare branza, iar cartea asta le trateaza diferit. Spune si citez: "Listele de initializare: aceasta metoda utilizeaza listele de instantiere (tratate anterior). O lista de instantiere (sau initializare) a membrilor unui obiect contine o lista a membrilor ce urmeaza a fi initializati si apare blablabla". Pai ori "utilizeaza listele de instantiere" ori e una si aceleeasi.
Imi pare rau pt. double post, nu pot edita ultimul post. Edited by bluething, 03 August 2015 - 18:21. |
#8
Posted 04 August 2015 - 09:59
Pai e o diferenta cam mare intre instantiere si initializare.
Obiectele in C++ sunt instante ale unor clase. Initializarea are de-a face cu valorile initiale ale membrilor unei clase. Exista mai multe motive, practice si de performanta pentru care vrei sa folosesti listele de initializare. Asadar obiectele sunt instantiate, variabilele sunt initializate, membrii unei clase pot fi initializati folosind o lista de initializare. Nu exista "lista de instantiere". E o prostie. Mai spun o data, poate intelegi: NU mai invata din cartea aia. Edited by sergiu_spooky, 04 August 2015 - 10:02. |
#9
Posted 04 August 2015 - 10:13
M-ai lamurit. Multumesc inca odata pentru ajutor!
Treaba cu listele era in carte inaintea constructorilor, nu am mai continuat si nu o sa mai continui sa invat dupa ea. Voi cauta pe internet. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users