Правила  •  FAQ  •  Поиск  •  Пользователи  •  Группы
Профиль  •  Войти и проверить личные сообщения  •  Вход  •  Регистрация 
 
 
Копирующие конструкторы
 
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив
 
Автор Сообщение
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение27.11.2005 22:57 Копирующие конструкторы Ответить с цитатой

Тут столкнулся со след. проблемой: надо сделать копирующий конструктор и передать в него атрибуты того же класса. В классе есть динамическая структура, к атрибутом которой надо как-то обратится. Примерый код таков:
Код:

class A{
private:
struct str{
int m[3][3];
int i;
};
str *pCurrent;
public:
A( const A &a );
};

A::A( const A &a ){
 memcpy( pCurrent->m, a./*вот тут надо обратится к a.str->m, а нельзя */... );
};


Мжт кто знает, как с этим справится?

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Сергей Фёдоров
Гость

   
Сообщение28.11.2005 1:19 Ответить с цитатой

Не совсем понятно, почему ты обращаешься к a.str->m, а не к a.pCurrent->m;
Кроме того, pCurrent - указатель, т.е. перед использованием нужно зарезервировать память:
pCurrennt = new str;

Вот, например, так работает, если я вообще правильно понял постановку вопроса. )

Код:

class A{
  private:
   struct str{
      int m[3][3];
      int i;
   };
   str *pCurrent;
   public:
     A (const A &a);
     A ();
};

A::A( const A &a ){
   pCurrent = new str;
   memcpy( pCurrent->m, a.pCurrent->m,sizeof(pCurrent->m));
};
A::A(){
  pCurrent = new str;
  for (int i = 0; i < 9; i++) pCurrent->m[i/3][i%3] = i;
};

int _tmain(int argc, _TCHAR* argv[])
{
  A b;
  A c(b);
  return 0;
}


Конечно, нужно потом удалить pCurrent в деструкторе.

Вернуться к началу
Snake!



Репутация: 0    Сообщения: 1941
Стаж: 3 года 4 месяца
Сообщение28.11.2005 2:13 Ответить с цитатой

Сергей Фёдоров
Резервирование памяти это и так понятно. Мне надо было скопировать одну структуру в другую. Уже и сам понял, надо было через this-> копировать, т.е.
Код:

...
this->pCurrent = a.pCurrent;
...


Добавлено спустя 29 секунд:

Но всё равно спасибо =)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы


На главную •  RSS-лента •  PDA-версия
 
Powered by phpBB © 2001, 2007 phpBB Group
Hosted by INFOBOX