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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 19:53   #1
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию Проблема с деструктором при выводе массива

Код:
#include <iostream>
using namespace std;
class conteiner
          {
          public:
                 conteiner(char *pName="nobody", int pNumber = 0)
                 {
                                cout << "Create name" << pName << "\n";
                                strncpy(name, pName, sizeof(name));
                                number = pNumber;
                 }
                 conteiner(conteiner& s)
                 {
                                      cout << " Copy " << s.name << "\n";
                                      cout << " Copy " << s.number << "\n";
                 } 
                 ~conteiner()
                 {             
                             cout << "must die " << name << "\n";
                 }              
          protected:
                    char name[40];
                 int number;
                 
          };
          
         void function(conteiner s)
         { 
               cout << "message the function" << endl;
         }
int main()
{
    conteiner create_user("Man_1", 1);
    cout << "function" << endl;
  function(create_user);
    cout << "the end" << endl;
    system("pause");
    return 0;
}
Не могу понять почему вместо "Man_1" выводит "]"
===========скрин===============
WebbMan вне форума Ответить с цитированием
Старый 28.03.2011, 20:16   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Так попробуй:
Код:
    char nm[] = "Man_1";
    conteiner create_user(nm, 1);
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 28.03.2011, 20:34   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Mandrivnyk
ты от фонаря советуешь, или как?

2WebbMan
ты свой объект по значению передаешь в функцию, но в копирующем корнструкторе не копируешь свой массив. вот те и выводится мусор. либо копируй, либо передавай по ссылке:
Код:
         void function(conteiner &s)
         { 
               cout << "message the function" << endl;
         }
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.03.2011, 20:49   #4
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

результат:

непонятно откуда 0 "
WebbMan вне форума Ответить с цитированием
Старый 28.03.2011, 20:50   #5
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

pproger ясно спасибо
WebbMan вне форума Ответить с цитированием
Старый 28.03.2011, 21:01   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
2Mandrivnyk
ты от фонаря советуешь, или как?
отнюдь.
при компиляции исходного кода получил
warning: deprecated conversion from string constant to ‘char*’.
Он лечится либо снижением "реагирования" компайлера (хотя это не лечение), либо так, как я написал.
Кстати, несмотря на варнинг, код сработал как надо.
Первое, что бросилось в глаза.
А вот передачу не по ссылке проморгал, каюсь...
И вовсе незачем сразу кидаться веником -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 28.03.2011, 22:23   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Mandrivnyk
это лечится не снижением реагирования, и не твоим способом, а объявлением константного параметра в конструкторе
Код:
conteiner(const char *pName="nobody", int pNumber = 0)
автору про это писать не стал, все равно никто не слушает.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
Отступы при выводе массива Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 03.01.2011 23:20
Портится кодировка при выводе массива в файл delias Win Api 3 20.04.2010 10:05
проблема при выводе с бинарного файла... xVxSeRGxVx Общие вопросы C/C++ 1 13.01.2010 19:08