Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое выделение памяти объектам 
:(
    Опции темы
Павлуха
Дата 26.11.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Помогите пжалста, вот программа.........колупался, но ничего не получилось, как выделеть в этой программе память объектам динамически!!!!???
Код

#include<iostream.h>
#include<string.h>
#include<stdio.h>
class worker
{    char fio[20];
    int number;
    int hours;
    int oplata;

public:
    void set(char*f,int n, int h,int o){strcpy(fio,f);number=n;hours=h;oplata=o;}//метод присваивания значений 
    void show(){cout<<fio<<' '<<number<<' '<<hours<<' '<<oplata;;}//метод вывода информации на экран
    
        
};
void main()
{
    int sotr,otd,i,j,lim1=1,lim2,buf[10];
    char f[20]; 
    int n,h,o;
worker obw[10][20];//10 отделов по 20 сотрудников 
cout<<"Kol-vo otdelov v firme: ";cin>>otd;
for(i=0;i<otd;i++)//цикл создания отделов
{
cout<<"Kol-vo sotrudnikov v otdele nomer "<<i+1<<": ";
cin>>sotr;
lim2=1;
    for(j=0;j<sotr;j++)//цикл создания списка сотрудников в отделе i
    {
    cout<<"Otdel "<<lim1<<":"<<endl;
    cout<<"Sotrudnik "<<lim2<<": "<<endl;
    cout<<"F.I.O. sotrudnika: "<<endl; 
    gets(f);
    cout<<"Tabel number: ";cin>>n;
    cout<<"Otrabotano chasov v mesyac: ";cin>>h;
    cout<<"Pochasovaya tarifnaya oplata: ";cin>>o;
    obw[i][j].set(f,n,h,o);
    lim2++;
    buf[i]=sotr;
    }lim1++;
}

//вывод всей введённой информации
    lim1=1;
for(i=0;i<otd;i++)
{    lim2=1;
    cout<<'\n'<<"Otdel "<<lim1<<":"<<endl;
    for(j=0;j<buf[i];j++)
    {    
        cout<<'\n'<<"Sotrudnik "<<lim2<<": "; obw[i][j].show();
        lim2++;
    }lim1++;
}
cout<<endl;
}

PM MAIL   Вверх
GrayCardinal
Дата 26.11.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



int * buf;
char *f;
buf = new int[10];
f = new char[20];

Что за воркер ? Ну да ладно
worker ** obw;
int i;
worker = new worker *[10];
for (i = 0; i < 10; ++i)
  obw[i] = new worker[ 20]

Удалять в обратную сторону.
Зачет  smile 


--------------------
PM MAIL WWW   Вверх
Voldemar2004
Дата 26.11.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Память для объекта класса Worker?


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Павлуха
Дата 26.11.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Цитата(Voldemar2004 @ 26.11.2006,  19:12)
Память для объекта класса Worker?

да
PM MAIL   Вверх
_stranger_
Дата 27.11.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



GrayCardinal, видимо имел ввиду
Код

   ...

   worker ** obw = new worker *[10];
   ...



 smile 
PM MAIL   Вверх
ip127001
Дата 27.11.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



еще если количество массивов известно можно так задать

int *obw[10]=new int[10][_size];

Добавлено @ 14:29 
Цитата(GrayCardinal @  26.11.2006,  19:11 Найти цитируемый пост)
int * buf;
char *f;
buf = new int[10];
f = new char[20];


про delete надо сказать натворит парень дело smile 

в конце проги надо динамическую память освобождать
 delete f;-переменная
 delete[] f;-массив

Это сообщение отредактировал(а) ip127001 - 27.11.2006, 14:24
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Павлуха
Дата 29.11.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Вот так???

Код

void main()
{    int * buf;                    //!!!!!!
    char *ff;                    //!!!!!!!!
    buf = new int[2];            //!!!!!!!
    ff = new char[25];            //!!!!!!
    int i;                        //!!!!!!!!
    stud **ob = new stud *[2];    //!!!!!!!!

    for (i = 0; i < 10; i++)
  ob[i] = new stud [25];

    
    stud sekciya[2][25];// создание объекта(2 секции по 25 фамилий) 
    int k1,k2,v;
    char f[30];
    while(1){    cout<<"****MENU****"<<'\n'<<"Sozdat spiski studentov...................(1)"<<'\n'
                                    <<"Vivesti otsortirovannie spiski..................(2)"<<'\n'
                                    <<"Vivesty spisok ychastnikov 1-y i 2-h sekciy.....(3)"<<endl;
    cin>>v;
    switch(v){
    case 1:    cout<<"kol-vo studentov v 1 sekcii:";    //ввод
            cin>>k1;
            for(i=0;i<k1;i++)
            {
                cin>>f;
                sekciya[0][i].set(f);
            }
            cout<<"kol-vo studentov vo 2 sekcii:";
            cin>>k2;
            for(i=0;i<k2;i++)
            {
                cin>>f;
                sekciya[1][i].set(f);
    }break;
    case 2:    sort(sekciya,k1,k2);break;//вызов метода сортировки списков
    case 3: run(sekciya,k1,k2);break;//вызов метода вывода списков студентов занимающихся в 1-й и 2-х секциях
            }
    }
    for (i = 10; i > 0; i--)//!!!!!!!!!!
    delete [i]ob;            //!!!!!!!!!!
}

PM MAIL   Вверх
Xenon
Дата 29.11.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Я вот этого участка не понимаю.
Код

   stud **ob = new stud *[2];    //!!!!!!!!

    for (i = 0; i < 10; i++)
  ob[i] = new stud [25];

Указатель указателей ссылается на два указателя. И ты на эти два указателя хочешь повесить 10 объектов?


--------------------
user posted image  
PM MAIL   Вверх
_stranger_
Дата 29.11.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



Павлуха, не забывай освобождать память...

Код


  //удаляем память...
  for(i = 0;i < 10;i++)
     delete [] ob[i];  
  delete [] ob;
  delete [] buf;
  delete [] ff;


PM MAIL   Вверх
Павлуха
Дата 29.11.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Цитата(Xenon @ 29.11.2006,  00:58)
Я вот этого участка не понимаю.
Код

   stud **ob = new stud *[2];    //!!!!!!!!

    for (i = 0; i < 10; i++)
  ob[i] = new stud [25];

Указатель указателей ссылается на два указателя. И ты на эти два указателя хочешь повесить 10 объектов?

Ну так, блин не понимаю я какой принцип выделения прамяти, объясните пжалста что тут и как!!?? smile  
PM MAIL   Вверх
Xenon
Дата 29.11.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Ну если ты создал ДВА указателя, то к ним ты можешь привязать ДВА адресса, а не 10 smile
stud **ob = new stud *[10];
Так тогда пиши


--------------------
user posted image  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.