Форум программистов, компьютерный форум CyberForum.ru

Непонятки с конструктором копирования - C++

Восстановить пароль Регистрация
 
Stason676
Заблокирован
13.06.2014, 04:10     Непонятки с конструктором копирования #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Table
{
    Row* p;
    size_t size;
public:
    Table(int i = 0)
    {
        p = new Row[i];
        size = i;
    }
    Table(const Table& t)
    {
        p = new Row[size = t.size];     //Если заменить на
                                        //p = new Row[size = t.GetSize()]
    }                                   //не работат, почему?
 
    size_t GetSize() { return size; }
};
Господа доброго времени суток, есть вопрос в, он в коментарии, прошу помощи. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2014, 04:10     Непонятки с конструктором копирования
Посмотрите здесь:

C++ Присваивание конструктором копирования
Проблема с конструктором. C++
Ошибка с конструктором копирования C++
C++ Работа с конструктором
C++ Проблеммка с конструктором копирования
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 04:52     Непонятки с конструктором копирования #2
C++
1
2
const size_t GetSize() const
{ return size; }
Stason676
Заблокирован
13.06.2014, 19:26  [ТС]     Непонятки с конструктором копирования #3
Спасибо, с const в принципе понятно, но еще созрел вопрос, почему можно обратиться к закрытому полю size объекта t?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 19:31     Непонятки с конструктором копирования #4
Мотоды класса и дружественные функции имеют доступ.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.06.2014, 20:16     Непонятки с конструктором копирования #5
Цитата Сообщение от Stason676 Посмотреть сообщение
почему можно обратиться к закрытому полю size объекта t?
Тут надо понимать, что закрытость она для других классов, а не для других объектов такого же класса. Если бы нельзя было получить доступ к приватным полям объекта, отличного от this, как бы тогда сделали, например, копирующий конструктор?
Trwsdf
Заблокирован
13.06.2014, 20:20     Непонятки с конструктором копирования #6
Тебе неправильно ответили "эксперты"
На самом деле причина в том, что в конструкторе модификатор const Table& - константный объект, который позволяет вызывать только константные функции имеющие указатель const this. GetSize() -неконстантная - в итоге либо сделать ее константной , либо убрать const в конструкторе.
Второе ниже, возвращаемое значение const в функции (первый const) ставить необязательно - будет VLA массив (C99).
C++
1
2
const size_t GetSize() const
{ return size; }
Третье, классы дружественны к своим объектам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 20:24     Непонятки с конструктором копирования
Еще ссылки по теме:

C++ шаблон с конструктором копирования
Что-то с конструктором C++
C++ Трабла с конструктором

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.06.2014, 20:24     Непонятки с конструктором копирования #7
Цитата Сообщение от Trwsdf Посмотреть сообщение
Тебе неправильно ответили.
В каком месте?
Цитата Сообщение от Trwsdf Посмотреть сообщение
будет VLA массив (C99).
Это вообще о чем?
Yandex
Объявления
13.06.2014, 20:24     Непонятки с конструктором копирования
Ответ Создать тему
Опции темы

Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru