Pole objektov,neviem zavolat konstruktor prvku...

Sekcia: Programovanie 26.03.2009 | 17:44
Avatar 01Laky Fedora 20,Android,Windows 8.1 PRO  Používateľ
Ahojte...Sam sa ucim c++ a triedu mam takuto :
class trieda
{
private :
char nazov_spolocnosti[40];
int pocet_akcii;
int cena_akcie;
int celkova_cena;
void trieda::upravSTR(char * p1 , char * p2 , int rozsah);
public :
trieda::trieda();
trieda::~trieda();
void trieda::napln(char * str , int pa , int ca);
void trieda::vypis();
};
Ako vidiet konstruktor mam bez parametrov a v hlavnom programe mam pole objektov...definicia konstruktoru je takato :
trieda::trieda()
{
nazov_spolocnosti[0] = '\0';
pocet_akcii = 0;
cena_akcie = 0;
celkova_cena = 0;
}
A v hlavnom programe mam cez switch menu a v nom ked pridam do pola polozku,a nenacitam hodnotu premennym v objekte,thak mi ten konstruktor ako keby nezavolalo,pri vypise su tam same blbosti...A bezparametricky konstruktor by malo volat defaultne,nie?Este pridam aj cast hlavneho programu :
int main()
{
trieda * pole = NULL;
char volba;
int rozsah = 0;
int pom = 0;
do
{
main_menu();
cin>>volba;
cin.clear();
while(cin.get() != '\n')
continue;
switch(volba)
{
case 'p' :
case 'P' : rozsah++;
pole = (trieda *) realloc(pole , sizeof(trieda) * rozsah);
napln(&pole[rozsah - 1]);
break;
Za poradenie dopredu dakujem...
    • Re: Pole objektov,neviem zavolat konstruktor prvku... 26.03.2009 | 18:11
      Avatar borg Arch, Debian jessie  Administrátor
      objekt sa vytvara cez new ak sa jedna o pointer, tusim realloc ti len alokuje/reallocuje pamat o danej velkosti
      • Re: Pole objektov,neviem zavolat konstruktor prvku... 26.03.2009 | 18:21
        Avatar borg Arch, Debian jessie  Administrátor
        teda neviem este, co sa robi v napln()
        • Re: Pole objektov,neviem zavolat konstruktor prvku... 26.03.2009 | 18:36
          Avatar 01Laky Fedora 20,Android,Windows 8.1 PRO  Používateľ
          jj...Uz som na tu chybu prisiel a to s tym new,thak to nie,lebo to mam len dynamicke pole,objekty su staticke,ale funkcia napln teraz vypada thakto :
          int napln(trieda * O)
          {
          char volba;
          int cena = 0;
          char nazov[40];
          for (int i = 0 ; i < 39 ; i++)
          {
          nazov[i] = '\0';
          }
          int pocet = 0;
          do
          {
          menu_napln();
          cin>>volba;
          cin.clear();
          while(cin.get() != '\n')
          continue;
          switch(volba)
          {
          case 'n' :
          case 'N' : system("cls");
          cout<<"Zadaj nazov spolocnosti : ";
          cin.get(nazov , 40).get();
          break;
          case 'a' :
          case 'A' : system("cls");
          cout<<"Zadaj pocet akcii co vlastni spolocnost : ";
          cin>>pocet;
          cin.clear();
          while(cin.get() != '\n')
          continue;
          break;
          case 'j' :
          case 'J' : system("cls");
          cout<<"Zadaj cenu jednej akcie : ";
          cin>>cena;
          cin.clear();
          while(cin.get() != '\n')
          continue;
          break;
          case 'q' :
          case 'Q' : system("cls");
          cout<<"NAVRAT DO MAIN MENU!!!"<<endl;
          getch();
          break;
          default : system("cls");
          cout<<"Bola zadana zla volba,volbu opakuj!!!"<<endl;
          getch();
          break;
          }
          }
          while(volba != 'q' && volba != 'Q');
          if(pocet == 0 || cena == 0 ||nazov[0] == '\0')
          {
          return 0;
          }
          else
          {
          O->napln(nazov , pocet , cena);
          return 1;
          }
          }
          No achybu som mal pri deklaracii tych premennych,lebo som im nedal ziadnu defaultnu hodnotu...