|
[ Neznalica_sa_ugla @ 30.08.2007. 11:57 ] @
| Vec bijaše neko slicno pitanje , pa i odgovori ali to se ipak ne odnosi na ovo ::
Naime ovaj kod radi kada stavim char * i to je ok , ali ne radi sa string ???
Code:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class cStudent
{
public:
cStudent(void);
cStudent(string , string , string , double);
void Ispisi(void);
void Upisi(string , string ,string , double );
cStudent * sljedi;
private:
string ime;
string prezime;
string id_st;
double prosijek;
};
cStudent::cStudent(void)
{
ime=" ";
prezime=" ";
id_st=" ";
this->prosijek=0;
}
cStudent::cStudent( string s1, string s2 ,string s3 ,double d1)
{
ime=s1;
prezime=s2;
id_st=s3;
prosijek=d1;
}
void cStudent::Upisi(string s1, string s2 ,string s3 ,double d1)
{
ime=s1; // Ovdije program puca
prezime=s2;
id_st=s3;
prosijek=d1;
}
void cStudent::Ispisi(void)
{
cout << this->ime << " " << this->prezime <<" " << this->id_st << " " << this->prosijek << endl ;
}
void main(void)
{
string v_ime;
string v_pre;
string v_broj;
double v_pros;
cStudent *pst=NULL ;
cStudent *pPocetak=NULL;
cStudent *ptemp=NULL;
int f=0;
while(f<3)
{
f++;
cout << "Unesi Ime Studennta :" ;
cin >> v_ime;
cout << endl;
cout << "Unesi Prezime Studennta :" ;
cin >> v_pre;
cout << endl;
cout << "Unesi Broj Studennta :" ;
cin >> v_broj;
cout << endl;
cout << "Unesi prosijek Studennta :" ;
cin >> v_pros;
cout << endl;
ptemp=pst;
pst=(cStudent*) malloc(sizeof(cStudent));
if(ptemp!=NULL)
{
ptemp->sljedi=pst;
}
if (pPocetak==NULL)
{
pPocetak=pst;
}
pst->Upisi(v_ime,v_pre,v_broj,v_pros);
pst->sljedi=NULL;
}
pst=pPocetak;
do
{
pst->Ispisi() ;
pst=pst->sljedi;
}while(pst!=NULL);
}
Samo mi nemojte reci " Vrati char , pa ce ti raditi " , HVALA
|
[ NastyBoy @ 30.08.2007. 12:32 ] @
Mene samo interesuje chemu ovo sluzhi:
Code: pst=(cStudent*) malloc(sizeof(cStudent));
[ X Files @ 30.08.2007. 12:45 ] @
Citat:
Mene samo interesuje chemu ovo sluzhi:
To je prazan prostor ;) nigde  na vidiku
P.S. / O.T.
Šta je ispravno (ijekavicom): "prosijek" ili "prosjek" ? Ja bih reko ovo drugo...
[ Neznalica_sa_ugla @ 30.08.2007. 14:02 ] @
""To je prazan prostor ;) nigde na vidiku"
naravno moglo je sa new ali eto ja sam stariji covijek , pmi nekako ostalo !!!
" Šta je ispravno (ijekavicom): "prosijek" ili "prosjek" ? Ja bih reko ovo drugo.. " .
Ja ocekivao nesto o programu , a mene on pita sta je ispravno ::
EVO NEZNAM!!
Ja sam studirao u Beogradu , pa zaboravio (ije) , sada mi lakše (e) ,a i to se ovdije cesto mijenja , da mi je zgodno da ti spremim jednu knjigu iz mreža od Julina Ozegovica , da vidis sto je pravopis , "grijeske u prenosu pogrijesni bitova , mogu biti posebno grijeske , koje se ..... " ,
Uostalom mislio sam da c++ nije alergican na (ije) ili (e ) ...
[ nikoladsp @ 31.08.2007. 07:24 ] @
lepo ti ljudi rekose....
stavi
Code: pst=new cStudent();
umesto
Code: pst=(cStudent*) malloc(sizeof(cStudent));
tako da ti se kulturno pozove konstruktor  , jer bez njega neces daleko stici  .
[Ovu poruku je menjao nikoladsp dana 31.08.2007. u 08:41 GMT+1]
[ Neznalica_sa_ugla @ 01.09.2007. 00:12 ] @
Skidam kapu , radi sa new , ali zasto onda radi sa char i malloc , ako nije bio pozvan konstruktor ???
[ kiklop74 @ 01.09.2007. 03:40 ] @
Citat: Neznalica_sa_ugla: Skidam kapu , radi sa new , ali zasto onda radi sa char i malloc , ako nije bio pozvan konstruktor ???
Kad budes shvatio zasto shvatices i razliku izmedju c++ i c-a.
Na primer pocni odavde:
http://wiki.answers.com/Q/What...lloc_and_new_other_than_syntax
http://www.codeguru.com/forum/showthread.php?t=401848
http://www.cplusplus.com/doc/tutorial/dynamic.html
[ perun_ @ 14.10.2007. 01:04 ] @
Moglo bi u nekom slucaju i sa malloc, ali se tu u C++ ne praktikuje. Ako bas hoces sa tim onda bi moralo stajati :
Code:
#include <stdlib.h>
Bar mi se cini da je tu, ali nisam siguran, davno bese...
[ Goran Arandjelovic @ 15.10.2007. 10:57 ] @
new operator u C++-u je implementiran zapravo preko malloc-a, s tim što se usput poziva i konstruktor određene klase... Ako koristiš samo malloc, dobićeš određeno parče memorije koje nije inicijalizovano... Mogao si i da uradiš sledeće:
Code:
#include <iostream>
using namespace std;
class A
{
public:
A() {x = 13; y = 5;}
int x, y;
};
int main()
{
A *a = (A*)malloc(sizeof(A));
a->x = 13;
a->y = 5;
// ovo je ekvivalentno inicijalizovanju objekta operatorom new (odnosno, instanciranju):
// A *a = new A; Ili, da su x i y bili private, onda je bilo moguće isto uraditi sa bilo kojom javnom metodom klase.
E sada, ovo je standardni operator new koji kao i svaki drugi može da se overloaduje globalno ili za svaku klasu posebno u zavisnosti od potreba.
Pozdrav! :)
[ Nedeljko @ 15.10.2007. 12:11 ] @
A šta ako mu se klasa cStudent zakomplikuje, pa bude imao virtuelne metode? Kako će onda da inicijalizuje prostor rezervisan sa malloc?
[ 1jedini @ 16.10.2007. 11:47 ] @
Primer preuzet iz 3.7.3.1.13
Code:
void* operator new(size_t, void* p) { return p; }
struct X {
// ...
X(int);
˜X();
};
void f(X* p);
void g() // rare, specialized use:
{
char* buf = new char[sizeof(X)];
X* p = new(buf) X(222);
f(p);
p->X::˜X(); //cleanup
}
Pogledati jos 5.3.4, 18.4 i 12.5.
i http://www.elitesecurity.org/t150132-Placement-new
[Ovu poruku je menjao 1jedini dana 16.10.2007. u 13:17 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|