Che Posted July 5, 2015 Report Posted July 5, 2015 struct MyStruct{ //the binary bit string is held in a std::string string bits; float frequency; MyStruct(): bits(""), frequency(0.0f){}; MyStruct(string bts, float fqns): bits(bts), frequency(fqns){}};Cum s-ar citi ultimele doua linii de cod ?MyStruct(): bits(""), frequency(0.0f){};MyStruct(string bts, float fqns): bits(bts), frequency(fqns){}Ce fac ele si ce inseamna mai exact ?Cum s-ar putea scrie intr-un mod mai inteligibil structura de mai sus (daca se poate) ?Multumesc ! Quote
Sim Master Posted July 5, 2015 Report Posted July 5, 2015 Aia sunt constructorii structurii. Daca creezi un obiect MyStruct si nu ii dai parametri, se apeleaza implicit primul constructor care va seta valoarea lui bits cu un string gol, iar pe frequency cu 0.0fDaca creezi un obiect MyStruct si ii dai 2 parametri, un string si un float, se apeleaza celalalt constructor care va seta valorile variabilelor cu ce ii dai in parametri. Quote
tjt Posted July 5, 2015 Report Posted July 5, 2015 Mai inteligibil :struct MyStruct{ //the binary bit string is held in a std::string string bits; float frequency; MyStruct() { bits = ""; frequency = 0.0f; } MyStruct(string bts, float fqns) { bits = bts; frequency = fqns; }};Nu am testat, dar ar trebui sa fie acelasi lucru. Quote
Che Posted July 5, 2015 Author Report Posted July 5, 2015 Multumesc mult !Ceva nou pentru mine, nu stiam ca o structura poate avea constructori. Asta este chiar nou. Stiu ca ma cam fac de ras dar pur si simplu nu scrie in nici o carte pe care o am eu de asa ceva. :"> Quote
hades Posted July 5, 2015 Report Posted July 5, 2015 Ca sa fie putin mai usor de inteles:In python, toata treaba s-ar traduce in asta:1. O clasa, a carei obiecte au 2 atribute bits respectiv freq. class MyStruct(object): def __init__(self, bits='', freq=0): self.bits = bits self.freq = freq2. Instantierea obiectelor acestei clase, ar arata ceva de genu: 2.1 instance1 = MyStruct() Pentru cazul in care nu vrei sa specifici explicit valoarea lui bits sau freq. Caz in care instance1.bits va returna stringul gol iar instance1.freq va returna 0; Ambele fiind valorile default. 2.2 isntance2 = MyStruct('ceva', 1) Caz in care instance2.bits si instance2.freq vor returna valorile specificate de tine la instantierea obiectului. Quote
S.L.C Posted July 6, 2015 Report Posted July 6, 2015 Ceva nou pentru mine, nu stiam ca o structura poate avea constructori. Asta este chiar nou. Stiu ca ma cam fac de ras dar pur si simplu nu scrie in nici o carte pe care o am eu de asa ceva. :">O structura se comporta exact ca o clasa. Defapt, chiar este o clasa. Singura diferenta este ca o structura are membri publici in mod implicit pe cand o clasa are membri privati in mod implicit.Exemplu:#include <cstdlib>#include <cstdio>struct A{ int Member;};class B{ int Member; // error: 'int B::Member' is private};class C{public: int Member;};int main(int argc, char **argv){ A a; B b; C c; printf("A %d \n", a.Member); //printf("B %d \n", b.Member); // error: within this context printf("C %d \n", c.Member); return EXIT_SUCCESS;}Am comentat liniile care produc eroare.Dar cred ca tu intrebi de initializer lists (nu stiu cum se numesc in romana). Mai exact portiunea dupa constructor:: bits(""), frequency(0.0f)Probabil esti obisnuit sa le vezi asa:MyStruct(){ bits = ""; frequency = 0.0f;};Dar acum incearca sa-ti imaginezi ca "frequency" este const. Cum il vei initializa acum?Daca incerci metoda clasica te asigur ca vei avea probleme:#include <cstdlib>#include <cstdio>struct A{ const int Member; A() // error: uninitialized const member in 'const int' [-fpermissive] { Member = 0; // error: assignment of read-only member 'A::Member' }};int main(int argc, char **argv){ A a; printf("A %d \n", a.Member); return EXIT_SUCCESS;}Motivul pentru care se foloseste initializer lists:#include <cstdlib>#include <cstdio>struct A{ const int Member; A() : Member(0) { }};int main(int argc, char **argv){ A a; printf("A %d \n", a.Member); return EXIT_SUCCESS;}Bineinteles, mai sunt si alte beneficii dar nu voi intra prea mult in detalii. Rareori initializez membrii unei classe in corpul constructorului. 1 Quote
unulsingur2000 Posted July 21, 2015 Report Posted July 21, 2015 nu cred ca mai e viu acest topic dar incerc...este vriun programator bun pe aici sa imi scrieu si mie o modulatie de pe un oscilosop..pe un PIC..mai exact am luat modulatia cu un analizor si vrau sa o refac pe un pic ca apoi acea ,modulatie sa faca la fel ca originalul cine stie sa ma caute pe id: iuliani685 Quote