[ ouros @ 21.01.2002. 06:27 ] @
Pozdrav svima
Imam problem jedan. Poceo sam da radim na nekom domacem za skolu ali imam problem. Nigde ne mogu da nadjem kako da radim sa Class-ama i Array's

Ovo ispod je prost primer

#include "stdafx.h"
#include <iostream>
#include <iomanip>

using std::cout;
using std::cin;
using std::endl;

// defining a class
class human{
private:
int empNo;
char name[32];
char address[32];
float salary;
public:
void enterEmployee(int);
void listEmployee(int);
};

void human::enterEmployee(int i)
{
empNo = i;
cout << "\nEmployee No: " << empNo << endl;
cout << "Name: "; cin >> name;
cout << "Address: "; cin >> address;
cout << "Salary: "; cin >> salary; cout << endl;
cout << endl;
}

void human::listEmployee(int i)
{
cout << "Employee No: " << empNo << endl;
cout << "Name: " << name << endl;
cout << "Address: " << address << endl;
cout << "Salary: " << salary << endl;
cout << "-----------------" << endl;
}

// starting w/ main function
int main()
{

int i=0;
human emp1, emp2, emp3;

cout << "\n Enter the following information !" << endl;

emp1.enterEmployee(1);
emp2.enterEmployee(2);
emp3.enterEmployee(3);

cout << "\n List of Employees" << endl;

emp1.listEmployee(1);
emp2.listEmployee(2);
emp3.listEmployee(3);

return 0;
}

ovo sam samo probao da vidim da li ce da mi radi. vidite i sami da je glupo odradjeno. e sad, ja znam kako da uradim ovo u drugom jeziku ali ne i u C++.

sta u stvari hocu da uradim ?
hocu da imam array recimo

human name_array[5];

i da kasnije zovem funkciju fillArray

koja bi glasila nesto tipa

human::fillArray( E sad ne znam sta ovde da stavim)
{
// sta se sad ovde pise. jel nesto tipa ?

human[ i ].name = ........;

// ili

name_array[ i ].name = ....... ;

// ili nesto sasvim peto.
}

Ajde pomagajte ako mozete. Nadam se da ste me razumeli.
Znaci ovaj program sto sam gore napisao,hocu uprosten koristeci array's ali ne znam sintaksu.

Radim u VC++ (Win 2k).

Hvala
Uros
[ Ivan Dimkovic @ 21.01.2002. 09:06 ] @
E ovako, pokusacu da ti pomognem -

Ne mozes tako da dodeljujes imena stringovima, ako koristis char[] array za polje.

Probaj:

Dodaj funkciju

Code:

__inline human::EditName(char *szName)
{
  strcpy(name, szName);
  /* ili: sprintf(name, "%s", szName); */
}

pa onda odakle hoces pozivas:

name_array[k].EditName("Pera Peric");
[ ouros @ 21.01.2002. 18:38 ] @
Hvala ti,ali ako te ne mrzi pogledaj ovo i reci mi u cemu sada gresim


#include "stdafx.h"
#include <iostream>
#include <iomanip>

using std::cout;
using std::cin;
using std::endl;

// defining a class
class human{
private:
char name[32];
public:
editName(char *);
listName();
};


human::editName(char *szName)
{
strcpy(name, szName);
}

human::listName()
{
cout << name;
}

// starting w/ main function

int main()
{

int i=0;
human name_array[5];
char employee[20];



for (i=0; i < 5; i++) {
cout << "name: ";
cin >> employee;
name_array[ i ].editName(employee);
cout << endl;
}

// list array

for (i=0; i < 5; i++) { // ovde je negde greska valjda
cout << "Name: " << name_array[ i ].listName() << endl;
}

return 0;
}


obrati paznju sta mi izbacuje
[ Ivan Dimkovic @ 21.01.2002. 18:52 ] @
Hmm.. za prvu pomoc, izbaci name[] niz iz protected u public (C++ cistunci znam da je ovo "no no" sto se stila programiranja tice, ali ovo je prva pomoc)

i onda umesto:

cout << "Name: " << name_array[ i ].listName() << endl;

stavi:

cout << "Name: " << name_array[ i ].name << endl;

[ ouros @ 21.01.2002. 19:11 ] @
Citat:
Ivan Dimkovic:
Hmm.. za prvu pomoc, izbaci name[] niz iz protected u public (C++ cistunci znam da je ovo "no no" sto se stila programiranja tice, ali ovo je prva pomoc)

i onda umesto:

cout << "Name: " << name_array[ i ].listName() << endl;

stavi:

cout << "Name: " << name_array[ i ].name << endl;



Hvala ti,sada radi.
Ako neko ima bolju ideju neka kaze, posto bi trebalo name da mi bude u private,ali ajde,ovo sad radi.

Pozdrav
[ Ivan Dimkovic @ 21.01.2002. 19:15 ] @
Ja mislim da je problem sto je taj cout ispisao i return vrednost one tvoje funkcije za ispis, koja opet nesto vraca na stack (odatle oni brojevi)... to moras drugacije da resis, ili da sve za ispis bacis u klasu human, ili da ispisujes van te klase...
[ Dragi Tata @ 21.01.2002. 19:19 ] @
Citat:
ouros:

Hvala ti,sada radi.
Ako neko ima bolju ideju neka kaze, posto bi trebalo name da mi bude u private,ali ajde,ovo sad radi.

Pozdrav


Ako name treba da bude private, onda ti je najbolje da dodaš par (public) funkcija:
const char* GetName();
void SetName (const char* newName);
[ ouros @ 21.01.2002. 19:22 ] @


Ako name treba da bude private, onda ti je najbolje da dodaš par (public) funkcija:
const char* GetName();
void SetName (const char* newName);[/quote]

Izvini,ali nisam bas najbolje razumeo, nisam dugo radio u C++ a ovo je sad relativno novo za mene( mislim class-e) tako da bi mi trebala malo opsirnija pomoc.

Hvala
[ Ivan Dimkovic @ 21.01.2002. 19:29 ] @
Pa da napravis "postapalice" - tj. funkcije koje ce ti dati pokazivac na neki private clan klase, i to moze lepo da se koristi... na primer

Code:

class a { 
public:

  char *daj_mi_pointer_na_clan();

protected:
  char szTemp[32];
}

char *a:daj_mi_pointer_na_clan()
{
  return szTemp;
}



Ovim postizes "relativno cist" stil programiranja, a opet mozes da se igras sa clanovima klase...
[ Dragi Tata @ 21.01.2002. 19:34 ] @
Citat:
ouros:


Ako name treba da bude private, onda ti je najbolje da dodaš par (public) funkcija:
const char* GetName();
void SetName (const char* newName);


Izvini,ali nisam bas najbolje razumeo, nisam dugo radio u C++ a ovo je sad relativno novo za mene( mislim class-e) tako da bi mi trebala malo opsirnija pomoc.

Hvala[/quote]

OK. Recimo da imaš klasu:

Code:

class CHuman
{
private:
   char name[32];
public:
   const char* GetName() {return name;}
   void SetName (const char* newName) {strncpy(name, newName, 32);}
};


Znači, umesto da direktno menjaš i čitaš name, koristiš otprilike:


cout << human.GetName();
ili
human.SetName("NovoIme");

gde je human promenljiva tipa CHuman.
[ ouros @ 21.01.2002. 20:47 ] @
Hvala vam na odgovorima.

Uros
[ leka @ 22.01.2002. 10:55 ] @
Dobices veceras gotov kod za ono sto si rekao Urose. Ovde ti zapravo niko nije odgovorio na prosto pitanje... Kapiram ja to, jednostavna pitanja su uvek komplikovana za gurue - znam to po sebi. :) Uvek razmisljam na svoj nacin i shvatim uvek pogresno. Ovaj put mislim da nisam pogresio - ti zapravo zelis da imas fillArra() funkciju koja ce da napuni niz "ljudi" nekim vrednostima. Za to nam zapravo treba jedna metoda klase Human koja bi imala argumente name, trt, mrt i koju bi pozivali da "ubacimo" odredjene vrednosti u objekat, kad imam to, imamo bazu na kojoj cemo napisati fillArray(). fillArray() bi zapravo pozivala tu funkciju, nazovimo je recimo SetHumanValues() :)
Neko ce reci "Sto onda nismo napravili to kao konstruktor", ja na to odgovaram "Sto da ne, napisite" :)
Kad se vratim s posla veceras napisacu to i poslati kod.

Pozdrav
[ Ivan Dimkovic @ 22.01.2002. 11:22 ] @
Forgive my display of ignorance, Leko - ali mislim da je Uros rekao da mu kod radi? Doduse, onaj stream input ima problema sa ENTER tasterom, ali u principu radi...

:)
[ leka @ 22.01.2002. 16:03 ] @
Ivane, ali to nije pitanje - momak se izgleda zaglavio kod pomenute fillArray() funkcije...
[ ouros @ 22.01.2002. 17:18 ] @
Citat:
leka:
Ivane, ali to nije pitanje - momak se izgleda zaglavio kod pomenute fillArray() funkcije...


U pravu ste oboje. Problem mi je bio fillArray funkcija jer to nisam kapirao kako se radi i onda sam cackao nesto i "kao" uspelo je. onda su mi Ivan i Dragi Tata dali par saveta. Code kao radi,ali me opet zezaju neke gluposti koje pokusavam sad da sredim.

Ako si Leko napisao code posalji ga molim te,posto ucim,da viidim da li ima neki bolji nacin od mog.

Hvala
Uros