cpp
Moderator: Moderatori
cpp
am o mare problema.. trebuie neaparat sa inteleg in timp util niste notiuni de c++. acestea sunt:
constructor, destructor.
poate cineva sa imi explice concret ce sunt ele? dar nu ma trimiteti spre siteuri va rog pt ca de pe ele tot ma chinui de cateva ore sa inteleg si nu reusesc.
explicati daca se poate prin cuv. voastre. eventual si exemple, care ar fi si mai utile.
multumesc.
constructor, destructor.
poate cineva sa imi explice concret ce sunt ele? dar nu ma trimiteti spre siteuri va rog pt ca de pe ele tot ma chinui de cateva ore sa inteleg si nu reusesc.
explicati daca se poate prin cuv. voastre. eventual si exemple, care ar fi si mai utile.
multumesc.
work harder
Constructorii si destructorul sunt metode speciale ale unei clase si se apeleaza automat la declararea ( sau iesire din blocul unde este valabila declaratia ) unei variabile din clasa respectiva sau la folosirea operatorilor new si delete .
Constructori nu au valoare de return , pot fi mai multi si se deosebesc dupa parametrii de apel , si au numele clasei unde sunt declarati . Destructorul ( e unul singur ) , nu are valoare de return , nu are parametrii de apel si are numele clasei in care e declarat cu ~ in fata .
Constructorii si destructorul trebuie sa fie "public" .
Nu este obligatoriu ca o clasa sa aiba constructor si/sau destructor.
Ex:
// exemplu de apel
Pentru clasele derivate , trebuie apelat explicit constructorul clasei de baza :
Constructori nu au valoare de return , pot fi mai multi si se deosebesc dupa parametrii de apel , si au numele clasei unde sunt declarati . Destructorul ( e unul singur ) , nu are valoare de return , nu are parametrii de apel si are numele clasei in care e declarat cu ~ in fata .
Constructorii si destructorul trebuie sa fie "public" .
Nu este obligatoriu ca o clasa sa aiba constructor si/sau destructor.
Ex:
Code: Select all
class MyClass
{
int a;
int b;
............
public :
............
void SetA(int _a_);
void SetB(int _b_);
MyClass(void); // declaratie constructor
MyClass(int _a_ ); // declaratie constructor
MyClass(int _a_ ,int _b_); // declaratie constructor
~MyClass(void); // declaratie destructor
};
void MyClass::SetA(int _a_ )
{
a = _a_;
}
void MyClass::SetB(int _b_ )
{
b = _b_;
}
MyClass::MyClass(void)
{
... // alte operatii de initializare
}
MyClass::MyClass(int _a_)
{
... // alte operatii de initializare
a = _a_;
}
MyClass::MyClass(int _a_,int _b_)
{
... // alte operatii de initializare
a = _a_;
a = _b_;
}
MyClass::~MyClass(void)
{
... // se elibereaza resurse alocate de clasa MyClass
}
// exemplu de apel
Code: Select all
void o_functie_oarecare (void)
{
MyClass c1; // se apeleaza automat primul constructor
MyClass c2(4); // se apeleaza automat al doilea constructor
MyClass c3(4,7); // se apeleaza automat al trilea constructor
static MyClass c4; // se apeleaza automat primul constructor
// inainte de orice intructiune a programului
// se inituializeaza membrii clasei care nu au fost initializati prin constructor
c1.SetA(8);
c1.SetB(9);
c2.SetB(11);
MyClass* pc5; // la declararea unui pointer nu apeleaza nici o metoda
pc5 = new MyClass(2); // se aloca memorie si se apeleaza automat al doilea constructor
......
delete pc5; // se apeleaza destructorul si se elibereaza memoria alocata
} // la iesirea din functie , pentru ca variabilele c1,c2,c3
// isi depasesc zona de validitate ( in engeza scop )
// se apeleaza automat destructorul
// nu se apeleaza insa si destructorul variabilei c4 pentru ca
// variabila e de tip static si are zona validitate de la lansare // pana la terminarea programului
// destructorul lui c4 e apelat dupa ultima intructiune a programului
Pentru clasele derivate , trebuie apelat explicit constructorul clasei de baza :
Code: Select all
class MySecondClass: public MyClass
{
.............
public:
.............
MySecondClass(void);
}
void MySecondClass::MySecondClass(void) : MyClass(void)
{
// inainte de executia acestui constructor a fost apelat constructorul clasei de baza
}
- bloomfield
- Posts: 214
- Joined: Sat Sep 13, 2003 2:55 pm
Am să încerc şi eu o explicaţie poate înţelegi mai bine 
Ok sa zicem că trebuie sa faci o clasa Beer. Şi când creezi o astfel de clasă trebuie să fie plină (bineînţeles).
Aşa că scrii aşa:
Ok acum sper că ai înţeles ce e ăla constructor. Desigur mai sunt multe alte lucruri de înţeles...
Uite o carte pe care ţi-o recomand: Thinking in C++ http://www.mindview.net/Books/TICPP/Thi ... CPP2e.html

Ok sa zicem că trebuie sa faci o clasa Beer. Şi când creezi o astfel de clasă trebuie să fie plină (bineînţeles).
Aşa că scrii aşa:
Code: Select all
class Beer
{
public:
float level; //asta spune cât de plină e berea; în procente să zicem
Beer(); //ăsta e constuctorul; se apelează automat când e creat un obiect
void Drink(float quantity); //asta e o metodă oarecare. Va goli ceva din level
}
Beer::Beer()
{
level = 100; //când facem berea o facem plină la 100%
}
void Beer::Drink(float quantity)
{
if( level >= quantity )
level -= quantity;
}
...
//si aşa se foloseşte:
Beer beer;
//acum beer.level e deja la 100 pentru că a fost apelat constructorul automat
beer.Drink(50);
//acum beer.level e la 50
Uite o carte pe care ţi-o recomand: Thinking in C++ http://www.mindview.net/Books/TICPP/Thi ... CPP2e.html
O barmaniţă virtuală aş putea accepta
...dar o bere virtuală?? Niciodată!
...dar o bere virtuală?? Niciodată!
Thinking in C++ mi se pare mult prea stufoasa pentru un incepator si cred ca o sa se cam piarda.
Eu zic ca mai bine ar porni de aici:
http://newdata.box.sk/bx/c/
Si poate ar trebui cineva sa explice cum e cu Constructori multiplii la o Clasa, nu doar cu cel implicit (eu nu ma incumet, nu am talent pedagogic).
Eu zic ca mai bine ar porni de aici:
http://newdata.box.sk/bx/c/
Si poate ar trebui cineva sa explice cum e cu Constructori multiplii la o Clasa, nu doar cu cel implicit (eu nu ma incumet, nu am talent pedagogic).
Dum zomfies...
ok, va voi mai stresa cu niste intrebari pt ca sunt la inceput si trb neaparat sa inteleg niste chestii elementare:
despre << si >>
eu stiam din c++ ca acestia sunt operatorii de iesire si intrare.
dar, surprize surprize, aflu ieri din cartea de c /c++ a lui herbert schildt (care apropo e chiar greoaie si destul de haotica, din cate vad) ca acestia sunt si operatori, in C, de deplasare la stanga, respectiv dreapta. Pe asta chiar nu am reusit sa o inteleg, e vb de deplasarea bitilor... chiar nu ma prind cum este cu deplasarea asta.
si inca un lucru:
faza cu signed/unsigned/long/short. efectiv nu stiu cand se declara una, cand se declara alta.
despre << si >>
eu stiam din c++ ca acestia sunt operatorii de iesire si intrare.
dar, surprize surprize, aflu ieri din cartea de c /c++ a lui herbert schildt (care apropo e chiar greoaie si destul de haotica, din cate vad) ca acestia sunt si operatori, in C, de deplasare la stanga, respectiv dreapta. Pe asta chiar nu am reusit sa o inteleg, e vb de deplasarea bitilor... chiar nu ma prind cum este cu deplasarea asta.
si inca un lucru:
faza cu signed/unsigned/long/short. efectiv nu stiu cand se declara una, cand se declara alta.
work harder
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
Vectorii sunt array-urile.
STL inseamna Standard Templates Library si este o colectie de template-uri pentru diverse chestii utile, gen vectori, harti asociative, stive, cozi, etc.
<< si >> inseamna deplasare pe biti la stanga sau dreapta. Daca ai un numar, de exemplu 32, el se scrie in baza doi asa: 000100000.
32 >> 2 inseamna ca din 000100000 rezulta 000001000 (adica 32 / 2*2)
32 << 2 inseamna ca din 000100000 rezulta 010000000 (adica 32 * 2*2)
Deci practic e o impartire/inmultire cu 2 la puterea numarului de biti deplasati.
signed si unsigned specifica daca variabila declarata poate avea si valori negative sau nu. Domeniul de valori e de obicei de la -x la x dar daca e unsigned atunci el devine de la 0 la 2*x.
Ceea ce e cu bold a fost editat, initial le pusesem invers. Multumesc lui idashahabin ca mi-a reportat greseala. :oops:
STL inseamna Standard Templates Library si este o colectie de template-uri pentru diverse chestii utile, gen vectori, harti asociative, stive, cozi, etc.
<< si >> inseamna deplasare pe biti la stanga sau dreapta. Daca ai un numar, de exemplu 32, el se scrie in baza doi asa: 000100000.
32 >> 2 inseamna ca din 000100000 rezulta 000001000 (adica 32 / 2*2)
32 << 2 inseamna ca din 000100000 rezulta 010000000 (adica 32 * 2*2)
Deci practic e o impartire/inmultire cu 2 la puterea numarului de biti deplasati.
signed si unsigned specifica daca variabila declarata poate avea si valori negative sau nu. Domeniul de valori e de obicei de la -x la x dar daca e unsigned atunci el devine de la 0 la 2*x.
Ceea ce e cu bold a fost editat, initial le pusesem invers. Multumesc lui idashahabin ca mi-a reportat greseala. :oops:
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer
- bloomfield
- Posts: 214
- Joined: Sat Sep 13, 2003 2:55 pm
Dacă îmi amintesc bine minte eu am învăţat STL din Thinking in C++ unde e un capitol despre asta (sper să nu greşesc nu am mai verificat) pe care ti-o mai recomand o dată.s|lent wrote:ce sunt vectorii, in c++, si ce este STL?
O barmaniţă virtuală aş putea accepta
...dar o bere virtuală?? Niciodată!
...dar o bere virtuală?? Niciodată!
Problema nu e chiar asa dureroasa.
Daca ai avea o clasa Complex (ai nevoie de schema?) atunci cand vei avea Complex a,b; nu vei putea sa faci a+b pt ca, compilatorul nu stie sa adune obiectele pe care le-ai definit tu. Pt asta trebuie sa definesti:
Complex operator + (Complex& a, Complex& b)
{
return Complex(a.re+b.re,a.im+b.im);
//sau daca vrei mai clar
//Complex c;
//c.re=a.re+b.re;
//c.im=a.im+b.im;
//return c;
}
Pana aici nici o problema, si nici nu sunt prea multe, dar atentie la definirea lui ++, pt ca exista var prefixata si cea postfixata. Cea prefixata e simpla pt ca intorci valoarea incrementata, dar la postfixata intorci valoare initiala si apoi o va incrementa. Nu faci decat sa intorci o valoare intermediara c egala cu val ne-incrementata dar incrementezi val data (sper ca ai idee ce inseamna int&)
Daca nu stii (explicam), atunci can folosesti
<tip_ceva> functie(<tip>& var)
atunci nu vei lucra cu o instanta a variabilei ci cu variabila. Deci daca ai:
int f1(int a)
{
a+=4;
return a;
}
int f2(int& a)
{
a+=5;
return a;
}
atunci va afisa (ceea ce e comentat)
void main()
{
//...
cout<<f1(a); //a+4
cout<<a; //a
cout<<f2(a); //a+4
cout<<a; //a+4
//...
}
Sper ca e suficient. Daca nu, zi-mi.
Daca ai avea o clasa Complex (ai nevoie de schema?) atunci cand vei avea Complex a,b; nu vei putea sa faci a+b pt ca, compilatorul nu stie sa adune obiectele pe care le-ai definit tu. Pt asta trebuie sa definesti:
Complex operator + (Complex& a, Complex& b)
{
return Complex(a.re+b.re,a.im+b.im);
//sau daca vrei mai clar
//Complex c;
//c.re=a.re+b.re;
//c.im=a.im+b.im;
//return c;
}
Pana aici nici o problema, si nici nu sunt prea multe, dar atentie la definirea lui ++, pt ca exista var prefixata si cea postfixata. Cea prefixata e simpla pt ca intorci valoarea incrementata, dar la postfixata intorci valoare initiala si apoi o va incrementa. Nu faci decat sa intorci o valoare intermediara c egala cu val ne-incrementata dar incrementezi val data (sper ca ai idee ce inseamna int&)
Daca nu stii (explicam), atunci can folosesti
<tip_ceva> functie(<tip>& var)
atunci nu vei lucra cu o instanta a variabilei ci cu variabila. Deci daca ai:
int f1(int a)
{
a+=4;
return a;
}
int f2(int& a)
{
a+=5;
return a;
}
atunci va afisa (ceea ce e comentat)
void main()
{
//...
cout<<f1(a); //a+4
cout<<a; //a
cout<<f2(a); //a+4
cout<<a; //a+4
//...
}
Sper ca e suficient. Daca nu, zi-mi.
Will make polys and splines for food...and clothes...
as mai aduaga ca in cazul de mai sus functia trebuie declarata friend Complex daca membrii sunt private (si ar cam trebui sa fie) si ca in cazul cu operatorii post si pre e si diferenta de sintaxa la declarare (in ambele cazuri - si cu functii friend si cu functii membru)...Wi][iE wrote:Problema nu e chiar asa dureroasa.
Daca ai avea o clasa Complex (ai nevoie de schema?) atunci cand vei avea Complex a,b; nu vei putea sa faci a+b pt ca, compilatorul nu stie sa adune obiectele pe care le-ai definit tu. Pt asta trebuie sa definesti:
Complex operator + (Complex& a, Complex& b)
{
return Complex(a.re+b.re,a.im+b.im);
//sau daca vrei mai clar
//Complex c;
//c.re=a.re+b.re;
//c.im=a.im+b.im;
//return c;
}
Pana aici nici o problema, si nici nu sunt prea multe, dar atentie la definirea lui ++, pt ca exista var prefixata si cea postfixata. Cea prefixata e simpla pt ca intorci valoarea incrementata, dar la postfixata intorci valoare initiala si apoi o va incrementa. Nu faci decat sa intorci o valoare intermediara c egala cu val ne-incrementata dar incrementezi val data
ah si inca o chestie...
wrong. de la -x la x sunt 2x+1 valori => nr. impar. => contradictieVoid wrote: signed si unsigned specifica daca variabila declarata poate avea si valori negative sau nu. Domeniul de valori e de obicei de la -x la x dar daca e unsigned atunci el devine de la 0 la 2*x.
ptr. n biti => signed : [0, 2^n - 1] si unsigned [-2^(n-1), 2^(n-1) - 1] asta folosing cod complement 2^(n-1)
Mr. Garrison: Sorry kids, I just can't trust something that bleeds for five days and doesn't die.
ma chinui de vreo 2 ore la un program la care m-am gandit eu, sa adune elementele a doi vectori. sigur gresesc pe undeva, sau poate nu stiu eu exact cum se realizeaza adunarea a doi vectori... parerea mea este ca se aduna valorile din vectorii respectivi.
iata programul:
eu vreau exact ce scrie in comentariu, adica sa spun ce element din vectorul 1 se aduna cu un element din vectorul 2, si apoi sa se faca suma lor. si nu inteleg unde gresesc?!
programul merge dar daca il rulez imi da un rezultat enorm si nu stiu de unde il ia. rulati-l si voi si spuneti-mi unde am gresit plz.
ps stiu ca nu prea ma pricep sa explic dar sper ca m-am facut inteles cat de cat: rezultatul operatiei e prea mare si mi se pare un rezultat stupid.
oh si inca ceva: unde dzeu este optiunea in borland 5 c++ de line numbers pt editor?
iata programul:
Code: Select all
#include <iostream.h>
/*programul trebuie sa afiseze elementele a doi vectori
apoi userul sa bage numarul elementelor dorite de el,
din vectori diferiti, si apoi sa se faca suma acelor elemente*/
void main()
{
int v1[2]={66, 666}, i, j;
for (i=0; i<2; i++)
{
cout <<"elementul din v1 este: " <<v1[i];
cin >>v1[i];
}
int v2[2]={11, 111};
for (j=0; j<2; j++)
{
cout <<"elementul din v2 este: " <<v2[j];
cin >>v2[j];
}
cout << "suma elementelor " <<v1[i] <<"al lui v[1], si " <<v2[j] << "al lui v[2] este: " <<( v1[i] + v2[j] );
int z;
cin >>z;
}
programul merge dar daca il rulez imi da un rezultat enorm si nu stiu de unde il ia. rulati-l si voi si spuneti-mi unde am gresit plz.
ps stiu ca nu prea ma pricep sa explic dar sper ca m-am facut inteles cat de cat: rezultatul operatiei e prea mare si mi se pare un rezultat stupid.
oh si inca ceva: unde dzeu este optiunea in borland 5 c++ de line numbers pt editor?
work harder
Problema programului tau este urmatoarea. Daca vrei sa aduni doi vectori va trebui sa o faci element cu element. Nu inteleg cum vrei sa aduni vectorii.
Iar a doua problema esta ca dupa ce iese din for i si j au valoarea 2 iar v1[2] si v2[2] nu exista. De aceea ai problema asta. Sau poate ma insel eu.
Iar a doua problema esta ca dupa ce iese din for i si j au valoarea 2 iar v1[2] si v2[2] nu exista. De aceea ai problema asta. Sau poate ma insel eu.
ok,atunci poti cumva sa imi oferi varianta ta la ce voiam eu sa fac?
si cum adica v1[2] si v2[2] nu exista?
deci: ce vreau eu sa fac.. am 2 vectori da? v1 si v2. ambii au cate 2 elemente. eu vreau sa cer userului sa introduca numarul elementului dorit din fiecare vector, si rezultatul sa fie suma lor. dar sincer cred ca nu are mare legatura ce am facut pana acum cu ce vreau sa iasa... deci ..HELP :crazyeyes:
si cum adica v1[2] si v2[2] nu exista?
deci: ce vreau eu sa fac.. am 2 vectori da? v1 si v2. ambii au cate 2 elemente. eu vreau sa cer userului sa introduca numarul elementului dorit din fiecare vector, si rezultatul sa fie suma lor. dar sincer cred ca nu are mare legatura ce am facut pana acum cu ce vreau sa iasa... deci ..HELP :crazyeyes:
work harder
- Black Shark
- Moderator
- Posts: 3096
- Joined: Tue Nov 26, 2002 9:51 pm
cand creezi un vector, sa-i zicem x[3] elementele adresabile sunt x[0], x[1], x[2]
iar cum tu in for-urile ala faci incrementarea dupa folosire(i++/j++), dupa ce va fi folosit fiecare cu valoarea 1 se va incrementa la 2
comenzile nu vor mai fi executate deoarece este incalcata conditia (i<2/j<2) dar valoarea 2 ramane, iar mai apoi cand incerci sa apelezi v2[j] si v2 evident va da eroare din moment ce elementul respectiv nu exista
btw, daca ramane batut in cuie numarul de 2 elemente/vector (care in cazul asta sunt v[0] si v[1]) de ce mai ceri userului numarul de elemente ?
iar suma cum sa fie ? toate elementele vectorilor adunate intr-o singura variabila sau sa rezulte un nou vector care sa aiba ca elemente suma elementelor corespondente din primii vectori (de ex v3[n]=v1[n]+v2[n])
iar cum tu in for-urile ala faci incrementarea dupa folosire(i++/j++), dupa ce va fi folosit fiecare cu valoarea 1 se va incrementa la 2
comenzile nu vor mai fi executate deoarece este incalcata conditia (i<2/j<2) dar valoarea 2 ramane, iar mai apoi cand incerci sa apelezi v2[j] si v2 evident va da eroare din moment ce elementul respectiv nu exista
btw, daca ramane batut in cuie numarul de 2 elemente/vector (care in cazul asta sunt v[0] si v[1]) de ce mai ceri userului numarul de elemente ?
iar suma cum sa fie ? toate elementele vectorilor adunate intr-o singura variabila sau sa rezulte un nou vector care sa aiba ca elemente suma elementelor corespondente din primii vectori (de ex v3[n]=v1[n]+v2[n])
1 out of 3 people who start smoking will eventually die. The other two apparently become immortal.
Black Shark wrote:cand creezi un vector, sa-i zicem x[3] elementele adresabile sunt x[0], x[1], x[2]
iar cum tu in for-urile ala faci incrementarea dupa folosire(i++/j++), dupa ce va fi folosit fiecare cu valoarea 1 se va incrementa la 2
comenzile nu vor mai fi executate deoarece este incalcata conditia (i<2/j<2) dar valoarea 2 ramane, iar mai apoi cand incerci sa apelezi v2[j] si v2 evident va da eroare din moment ce elementul respectiv nu exista
btw, daca ramane batut in cuie numarul de 2 elemente/vector (care in cazul asta sunt v[0] si v[1]) de ce mai ceri userului numarul de elemente ?
iar suma cum sa fie ? toate elementele vectorilor adunate intr-o singura variabila sau sa rezulte un nou vector care sa aiba ca elemente suma elementelor corespondente din primii vectori (de ex v3[n]=v1[n]+v2[n])
nu cer userului numarul de elemente, cer numarul elementului iar userul va pune 0 sau 1. cred ca trebuia un if pe acolo:)
iar suma va fi valoarea stocata in elementul selectat din primul vector, adunata cu valoarea din elementul selectat din al 2lea vector.


legat de prima ta explicatie, mi-am inteles in sfarsit greseala.
work harder
Nu cred ca lipseste un if ci un while (do/for...whatever). Asta daca vrei sa intrebe in continuu ce element doreste afisat pana intalneste un caracter...sau altceva...
Ar trebui sa-ti lamuresti ce inseamna sa incrementezi post-fixat si pre-fixat.
1. Prefixat, inseamna ca incrementarea se face imediat:
int i=10;
cout<<++i; //11
cout<<i; //11
2. Post fixat inseamna ca valoarea folosita este cea initiala, care se va incrementa ulterior (aici chiar ca nu stiu cum gandeste C-ul - cer ajutorul celorlalti
). De-asta, atunci cand tu folosesti for(i=0;i<mm;i++) prima valoare cu care lucreaza for-ul este 0 si nu 1.
int i=10;
cout<<i++; //10
cout<<i; //11
//sper ca n-am facut iar greseli de sintaxa
Ar trebui sa-ti lamuresti ce inseamna sa incrementezi post-fixat si pre-fixat.
1. Prefixat, inseamna ca incrementarea se face imediat:
int i=10;
cout<<++i; //11
cout<<i; //11
2. Post fixat inseamna ca valoarea folosita este cea initiala, care se va incrementa ulterior (aici chiar ca nu stiu cum gandeste C-ul - cer ajutorul celorlalti

int i=10;
cout<<i++; //10
cout<<i; //11
//sper ca n-am facut iar greseli de sintaxa
Will make polys and splines for food...and clothes...
s|lent, din cate ai spus tu eu asta am inteles:
Eu asa vad programul. L-am facut repede, sper sa nu am greseli. La mine merge si l-am testat de 2 ori. 
Code: Select all
//Programul asta citeste ambii vectori. Nu ii declara de la inceput.
//Poti alege si numarul de elemente.
#include <iostream.h>
int v1[100],v2[100],n1,n2,var1,var2;
void citire1()
{for(int i=1;i<=n1;i++)
{cout<<"v1["<<i<<"]=";cin>>v1[i];}
}
void citire2()
{for(int i=1;i<=n2;i++)
{cout<<"v2["<<i<<"]=";cin>>v2[i];}
}
void main()
{cout<<"Nr elementelor primului vector=";cin>>n1;
cout<<endl<<"Ne elementelor celui de-al doliea vector=";cin>>n2;
citire1(); //citeste vectorul 1
citire2(); //citeste vectorul 2
//acum afisezi pe ecran vectorii
cout<<endl<<"Vectorul 1 introdus este: ";
for(int i=1;i<=n1;i++)
{cout<<v1[i]<<' ';}
cout<<endl<<"Vectorul 2 introdus este: ";
for(int j=1;j<=n2;j++)
{cout<<v2[j]<<' ';}
cout<<endl<<"introduceti valoarea din vectorul 1 pt a fi adunata: ";cin>>var1; //citesti pozitia primului element pe care vrei sa-l aduni. ai grija sa nu pui o valoare mai mare decat n1
cout<<endl<<"introduceti valoarea din vectorul 2 pt a fi adunata: ";cin>>var2; // var2<=n2 MI-e lene sa mai pun un if pt testare :)
cout<<endl<<"suma celor 2 pozitii este: "<<v1[var1]+v2[var2];
//Eu asta am inteles din cate ai zis tu. Sper sa fie cum vrei tu. DAca vrei, poti sa scoti citirea si sa decalri direct cu 2 pozitii vectorul.
//Pozitiile mele incep de la 1 pana la n inclusiv. Am sarit peste v1[0] si v2[0]. Adica ai pozitii de la 1 la n inclusiv.
}

- sssssid the sloth
- Posts: 34
- Joined: Wed Mar 31, 2004 1:19 pm
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
Da, eu stiu un pic.
Manuale poti gasi cu diversele metode mai neortodoxe.
Manuale poti gasi cu diversele metode mai neortodoxe.

96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer
revin cu întrebări de clasa I, ca de obicei:
ce sens are să scriu
când pot să scriu şi e acelaşi lucru.
nu înţeleg utilitatea lui extern ăla.
ce sens are să scriu
Code: Select all
extern int a;
Code: Select all
int a;
nu înţeleg utilitatea lui extern ăla.
work harder
nu înţeleg o chestie> am în program linia
şi programul se compilează fără probleme în Borland (softul full). Dar dacă vreau să compilez acelaşi program în compilatorul linie de comandă ( tot Borland), nu merge de nici o culoare, zice că nu găseşte iostream.h şi nu înţeleg de ce pt că fişierele EXISTĂ. Am
încercat să scriu şi calea completă: şi mi-a dat şi mai multe erori, cum că nu vede istream.h şi ostream.h. Am încercat apoi să includ în program calea exactă a lui istream şi ostream şi tot nu merge. Ştiţi cumva ce anume îmi scapă la compilatorul ăsta ? E varianta gratuită dar trebuie să meargă.
mă stresează mărunţişurile de genul ăsta care mă fac să pierd timpul. deci, help.
Code: Select all
#include <iostream>
încercat să scriu şi calea completă:
Code: Select all
#include <c:\bla bla\iostream.h>
mă stresează mărunţişurile de genul ăsta care mă fac să pierd timpul. deci, help.
work harder
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
In mod normal ar trebui sa mearga si din linia de comanda. Incearca sa specifici calea catre fisierele header asa:
bcc -Ic:/foo/bar fisier.cpp
bcc -Ic:/foo/bar fisier.cpp
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer

ce sens are sa scriu
Code: Select all
using namespace std
later edit:
avem asa:
Code: Select all
#include <cstdlib>
using namespace std;
void main()
{
system("notepad");
}
Last edited by andrei on Tue Jun 22, 2004 12:43 am, edited 1 time in total.
work harder
- bloomfield
- Posts: 214
- Joined: Sat Sep 13, 2003 2:55 pm
Dacă nu scrii "using namespace std;" trebuie să accesezi tot ce ţine de namesapce-ul respectiv folosind std:: ca prefix
De exemplu în loc de
trebuie să scrii
Asta e utilitatea using namespace. Îţi face conţinutul namespace-ului repectiv direct disponibil în codul tău.
Acum nu pare mare lucru dar dacă ai multe namespace-uri şi cu nume lung de genul
şi trebuie să scrii chestii de genul:
devine mult mai interesant.
Tu ai dreptate pe undeva include şi using namespace ar trebui să fie cam acelaşi lucru dar este aşa din considerente istorice. Namespace-urile au fost introduse în C++. Include erau folosite în C şi deci şi în C++. Limbajele moderne gen Java sau C# au construcţii similare cu using namespace care însa fac şi treaba include-ului.
De exemplu în loc de
Code: Select all
cout << "cucu" << endl;
Code: Select all
std::cout << "cucu" << std::endl;
Acum nu pare mare lucru dar dacă ai multe namespace-uri şi cu nume lung de genul
Code: Select all
namespace Cucu
{
namespace Bau
{
class Trosc
{
public:
void MakeMeHapy();
}
}
}
Code: Select all
Cucu::Bau::Trosc trosc = new Cucu::Bau::Trosc();
trosc.MakeMeHapy();
Tu ai dreptate pe undeva include şi using namespace ar trebui să fie cam acelaşi lucru dar este aşa din considerente istorice. Namespace-urile au fost introduse în C++. Include erau folosite în C şi deci şi în C++. Limbajele moderne gen Java sau C# au construcţii similare cu using namespace care însa fac şi treaba include-ului.
O barmaniţă virtuală aş putea accepta
...dar o bere virtuală?? Niciodată!
...dar o bere virtuală?? Niciodată!
ce fel de argumente poate primi funcţia system() ? am văzut că primeşte executabile windows, cum ar fi notepad... dar nu pot să scriu, de ex:
adică orice alt fişier.
----------
şi încă ceva, când vreau să fac append la un string, cu un alt string
de ex
appendul merge şi cu operatorul +, şi cu operatorul +=, şi asta mă face să nu pot pricepe diferenţa dintre operatorii ăştia.
Code: Select all
system("c:\game.exe");
----------
şi încă ceva, când vreau să fac append la un string, cu un alt string
de ex
Code: Select all
string s0, s1="pepene";
s0= s1 + " " + "galben";
work harder
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
s1 = s1 + s2 este echivalent cu s1 += s2;
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer
legat de vectori, nu inteleg diferenta intre a folosi vectorii prin
sau
nu reusesc sa inteleg primul mod de utilizare al vectorilor, de ce as folosi headerul <vector> daca oricum pt a crea un vector nu imi trebuie acest header?
sper ca intelegeti ce vreau sa spun. si apropo, folosind prima metoda nici nu pot specifica dimensiunea vectorului, din cate vad.
Code: Select all
#include <vector>
//si crearea de vectori prin:
vector<tip> v;
Code: Select all
tip_vector v[i];
sper ca intelegeti ce vreau sa spun. si apropo, folosind prima metoda nici nu pot specifica dimensiunea vectorului, din cate vad.
work harder