Jump to content
Che

[C++] Cum se traduce codul asta ?

Recommended Posts

Posted

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 !

Posted

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.0f

Daca 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.

Posted

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.

Posted

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. :">

Posted

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 = freq

2. 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.

Posted

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.

  • Upvote 1
Posted

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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



×
×
  • Create New...