Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 00:03   #1
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
Сообщение Классы (конструктор/деструктор)

при выполнении жалуется на "нехватку ф-й при обращении?77" при обращении из мейна, при том на инициализацию не жалуется о.О
Цитата:
#include <iostream>
#include <string>

using namespace std;

class card
{
public:
string gender;
string name;
string k="WARNING! *Pension age*";
string t="Age doesn't pension";
long employee_id;
int age;
float salary;
card(string sex, string fname, string WARN, string NOT, long id, int old, float pay)
{
gender=sex;
name=fname;
k=WARN;
t=NOT;
employee_id=id;
age=old;
salary=pay;
}
~card()
{

}
string employee()
{
if(gender!="Female")
return age>60? k:t;
else
return age>50? k:t;
}
void output()
{
cout<<endl<<"Gender of employee: "<<gender<<endl;
cout<<"Name of employee: "<<name<<endl;
cout<<"Personal ID: "<<employee_id<<endl;
cout<<"Age of employee: "<<age<<endl;
cout<<"Salary of employee: "<<salary<<endl;
}
};
int main(void)
{
card e;
cout<<"Gender of employee:"<<endl;
cin>> e.gender;
cout<<"Name of employee:"<<endl;
cin>> e.name;
cout<<"Personal ID:"<<endl;
cin>>e.employee_id;
cout<<"Age of employee:"<<endl;
cin>>e.age;
cout<<"Salary of employee:"<<endl;
cin>>e.salary;
e.output();
cout<<endl<<e.employee()<<endl;
return 0;
}
Satansoft вне форума Ответить с цитированием
Старый 27.03.2013, 10:46   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
при выполнении жалуется на "нехватку ф-й при обращении?77" при обращении из мейна
А можно то же самое, только для тех, кто с первого раза не понял?
Abstraction вне форума Ответить с цитированием
Старый 27.03.2013, 13:23   #3
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
По умолчанию

Проблему видно при выполнении кода, решилась передачей параметров, вопрос другого плана, конструуктор память выделяет, а в деструкторе её удалить не выходит...

Код:
#include <iostream>
#include <string>

using namespace std;

class card
{
    public:
    string gender;
    string name;
    string k="WARNING! *Pension age*";
    string t="Age doesn't pension";
    long employee_id;
    int age;
    float salary;
    card(string sex, string fname, string WARN, string NOT, long id, int old, float pay)
    {
            gender=sex;
            name=fname;
            k=WARN;
            t=NOT;
            employee_id=id;
            age=old;
            salary=pay;
    }
    card()
    {
        string *gender=new (string);
        string *name=new (string);
        string *k=new (string);
        string *t=new (string);
        long *employee_id=new (long);
        int *age=new (int);
        float *salary=new (float);

    }
    ~card()
    {
        cout<<endl<<"Gender of employee: "<<gender<<endl;
        cout<<"Name of employee: "<<name<<endl;
        cout<<"Personal ID: "<<employee_id<<endl;
        cout<<"Age of employee: "<<age<<endl;
        cout<<"Salary of employee: "<<salary<<endl;
    }
    string employee()
    {
        if(gender!="Female")
          return age>60? k:t;
          else
          return age>50? k:t;
    }
};
int main(void)
{
    card e("Female", "Sew", "WARNING! *Pension age*", "Age doesn't pension", 45245, 19, 3100);
    cout<<e.employee()<<endl;
    return 0;
}
Satansoft вне форума Ответить с цитированием
Старый 27.03.2013, 13:28   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
    card()
    {
        string *gender=new (string); //Объявлена новая локальная переменная gender
        //типа string*. Она перекрывает переменную-член класса gender типа string.
        

    } //Выход из функции, локальная переменная gender уничтожается. Утечка памяти.
Abstraction вне форума Ответить с цитированием
Старый 27.03.2013, 13:34   #5
Satansoft
Пользователь
 
Регистрация: 24.11.2012
Сообщений: 40
По умолчанию

Выделил память, под указатели? Как бороться с утечкой?)
Satansoft вне форума Ответить с цитированием
Старый 27.03.2013, 14:20   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Выделил память, под указатели? Как бороться с утечкой?)
Освободить выделенную память. Если память выделена внутри функции и указатель на неё не передаётся наружу (как в Вашем примере), освобождать память следует до выхода из функции. Ещё умные люди, smart_ptr/auto_ptr уже давно придумали, пользуйтесь.

Вопроса о том, зачем Вы выделили эту память, я не касаюсь.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++. Конструктор и деструктор dimok5 Помощь студентам 1 29.11.2011 19:31
Конструктор Деструктор sir.andrey Помощь студентам 7 02.07.2011 10:56
Конструктор и деструктор Ярослав Л Помощь студентам 1 18.01.2011 15:20
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01
С++ (конструктор, деструктор) Kventin Помощь студентам 4 31.03.2009 18:11