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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2009, 13:36   #1
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию оператор new

Код:
//файл 1.cpp
person::person(int no, char *fi, char po, int vo)
{
	person::nom_chel = no;
	strcpy(person::fio, fi);
	person::pol = po;
	person::vozrast = vo;
	per = new person;//вот это работает? если да то почему там дальше ошибка
}

person::~person()
{
	cout << "Ura" << endl;
	delete per;
}

void main()
{
   int n;
   person pers(1,"Николай Никол Николыч",0,20);
   pers.Print();
   cout << "Введите номер клиента: ";
   cin >> n;
   per.nomer(n);//здесь пишет ошибку error C2065: 'per' : undeclared identifier
   per.Print();//здесь пишет ошибку error C2065: 'per' : undeclared identifier
}

//файл 1.h
class person
{
private: 
	int nom_chel; 
	char fio[70]; 
	char pol; 
	int vozrast; 
	person *per;//это я создаю переменную или что?

public:
	person(int no = 1, char *fi = "Максимыч", char po = 0, int vo = 26);
	void Print();//выводит данные на экран
	~person();
	void nomer(int no);
};
Задача: Создать динамический объект с помощью обычного конструктора и оператора new, вывести данные на экран и удалить его из памяти с помощью delete.
Я где только не искал информацию по этому new и delete...Страуструпа тоже пролистал, объясните пожалуйста своими словами где что и как пользоваться этими операторами...я только начинаю изучать Visual C++ (контрольные делаю). После простого PHP чот совсем не могу въехать в суть С++, но загвоздка пока что только в этом динамическом объекте. Помогите пожалуйста...
Николай Сергеевич вне форума Ответить с цитированием
Старый 18.12.2009, 13:47   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
person *per;//это я создаю переменную или что?
это указатель типа person (как бывает указатель типа int, char и т.п )
создавать внутри класса указатель на самом себя смысла нет, там и так есть такой(this)

Наверно в задании имелось в виду просто создать обьект класса, сделать что-то с ним и удалить его
Код:
void main()
{
   person *per ;
   per = new person(1,"Николай Никол Николыч",0,20);
   per->Print();

  delete per;

}
соответственно из класса надо убрать person *per, new и delete
m0nax вне форума Ответить с цитированием
Старый 18.12.2009, 14:21   #3
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Цитата:
Код:
void main()
{
   person *per ;
   per = new person(1,"Николай Никол Николыч",0,20);
   per->Print();

  delete per;

}
Ага, сделать получилось и на счет указателя понял, для задания пойдет, но для меня...появился еще вопросик...
1. per = new person(1,"Николай Никол Николыч",0,20); - это создается объект per типа person в динамической памяти, т.е. если этот объект не удалить после завершения программы, он так и останется в памяти?
2. можно ли команду (delete per) удаление этого объекта поместить в дискриптор, если в таком же виде, то ругается...
и...огромное спасибо за уже так быстро оказанную помощь...

Последний раз редактировалось Николай Сергеевич; 18.12.2009 в 14:38.
Николай Сергеевич вне форума Ответить с цитированием
Старый 18.12.2009, 17:14   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Николай Сергеевич Посмотреть сообщение
Ага, сделать получилось и на счет указателя понял, для задания пойдет, но для меня...появился еще вопросик...
1. per = new person(1,"Николай Никол Николыч",0,20); - это создается объект per типа person в динамической памяти, т.е. если этот объект не удалить после завершения программы, он так и останется в памяти?
2. можно ли команду (delete per) удаление этого объекта поместить в дискриптор, если в таком же виде, то ругается...
и...огромное спасибо за уже так быстро оказанную помощь...
нет, зато он будет в памяти пока жива сама программа
в любом случае когда объект выходит из области видимости( { } ) он удаляется

delete per в деструктор никак не поместить, ибо per существует только в пределах скобок main() { }
деструктор вызывается как раз при освобождении памяти выделенной под объект

т.е в данном случае нет смысла в явном delete per, смысл будет если мы захотим удалить объект раньше завершения программы

Последний раз редактировалось m0nax; 18.12.2009 в 18:26.
m0nax вне форума Ответить с цитированием
Старый 18.12.2009, 21:22   #5
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Важный момент про new - этот оператор вызывает конструктор класса!
З.Ы. ожидал темы с перегрузкой new и delete, что уже интереснее
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 19.12.2009, 18:13   #6
Николай Сергеевич
Пользователь
 
Аватар для Николай Сергеевич
 
Регистрация: 14.12.2009
Сообщений: 17
По умолчанию

Спасибо большое за помощ, вроде немного понял...
Николай Сергеевич вне форума Ответить с цитированием
Старый 19.12.2009, 18:57   #7
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от m0nax
создавать внутри класса указатель на самом себя смысла нет, там и так есть такой(this)
А как ты список будешь делать?..
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24
оператор while tim777777 Помощь студентам 3 09.03.2009 19:57
оператор >> в C++ sum42 Помощь студентам 1 24.12.2008 17:27
Оператор в с++ JOFRIF Помощь студентам 2 22.04.2008 18:12
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10