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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение памяти в конструкторе 
:(
    Опции темы
paSha_X
Дата 25.12.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Вот начал писать программу, в конструкторе надо выделить память под данные класса.............Вообщем всё компилируется, но мне кажется что что-то не то, посмотрите пжалста опытным взглядом, правильно выделяется память или нет?????
Код

#include<iostream.h>
#include<string.h>
class base{
    char *name;
public:
    base()
    {
        name=new char[20];
        cout<<"Konstruktor classa base..."<<endl;
    }
    ~base()
    {
        delete[]name;
        cout<<"Destruktor classa base..."<<endl;
    }
    void set(char* n)
    {
        strcpy(name,n);
    }
};
class proizv:public base
{
    int *kol;
    double *price;
    int *date;
public:
    proizv():base()
    {
        kol=new int;
        price=new double;
        date=new int;
        cout<<"Konstruktor classa proizv..."<<endl;
    }
    ~proizv()
    {
        delete kol;
        delete price;
        delete date;
    }
    void set(int* k,double* p,int* d)
    {
        kol=k;
        price=p;
        date=d;
    }
};
void main(){}

PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Rockie
Дата 25.12.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(paSha_X @  25.12.2006,  17:32 Найти цитируемый пост)
 правильно выделяется память или нет?????

paSha_X, бессмысленно, но правильно =)

Код
void set(int* k,double* p,int* d)

почему передается по указателю?


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Anikmar
Дата 25.12.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



    void set(char* n)
    {
        strcpy(name,n);
    }

А если строка будет больше 20? Где контроль длины?
PM MAIL ICQ   Вверх
paSha_X
Дата 25.12.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Rockie,  вот это меня и ввело в заблуждение, без указателей ERROR.......

Anikmar, это условно, просто строка максимум 20......
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Xenon
Дата 25.12.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



paSha_X, сделай конструтор base() с параметром, аля int size.


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


Эксперт
****


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

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



Цитата(paSha_X @  25.12.2006,  18:08 Найти цитируемый пост)
Anikmar, это условно, просто строка максимум 20...... 

Условно-не условно, а потом при тесте будешь голову ломать откуда AV вылазит.
Если условно, то хоть 200 сделай, 20 совсем уж маленькая строка
PM MAIL ICQ   Вверх
paSha_X
Дата 25.12.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Это я всё сделаю, меня интересует вот это:
Код

 void set(int* k,double* p,int* d) 

Цитата(Rockie @  25.12.2006,  17:59 Найти цитируемый пост)
почему передается по указателю? 


PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Anikmar
Дата 25.12.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А зачем по указателю?
Можно так:
Код

   void set(int k,double p,int d)
    {
        *kol=k;
        *price=p;
        *date=d;
    }

PM MAIL ICQ   Вверх
paSha_X
Дата 25.12.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Ок всем спасибо, во всём разобрался.......
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Daevaorn
Дата 25.12.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



paSha_X, без своих контсруктора копирования и оператора присваивания будет очень интересный эффектsmile
PM MAIL WWW   Вверх
paSha_X
Дата 25.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Да уж, всё равно не то что-то
разве вот тут можно присваивать указателю эти значения....?
Всё работает но не выводит эти 3 элемента( kol , price , date)
Код

void set(int k,double p,int d)
    {
        *kol=k;
        *price=p;
        *date=d;
    }


Вот накидал по этому же принципу простой класс, посмотрите, выводит шелуху какую-то.......
Код

#include<iostream.h>
class myclass
{
    int *x;
public:
    
    myclass(){x=new int;}
    ~myclass()    {delete x;    }
    void set(int xx)    {*x=xx;    }
    void show()            {cout<<x<<endl;}
};
void main()
{
myclass ob;
ob.set(1);
ob.show();
}


Это сообщение отредактировал(а) paSha_X - 25.12.2006, 19:41
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Daevaorn
Дата 25.12.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(paSha_X @  25.12.2006,  20:40 Найти цитируемый пост)
 выводит шелуху какую-то

это не шелуха, а адрес выделенной памятиsmile
Цитата(paSha_X @  25.12.2006,  20:40 Найти цитируемый пост)
Всё работает но не выводит эти 3 элемента( kol , price , date)

если выводишь так же как и "шелуху", то ясно почему не то выводитsmile
Разыменовывать указатель нужно.
PM MAIL WWW   Вверх
paSha_X
Дата 25.12.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Цитата(Daevaorn @  25.12.2006,  19:49 Найти цитируемый пост)
Разыменовывать указатель нужно. 


Это как???
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Daevaorn
Дата 25.12.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



paSha_X, 
Код

*x

PM MAIL WWW   Вверх
paSha_X
Дата 25.12.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

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



Daevaorn, Ясно, спасибо......
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0698 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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