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

Запрещение переинициализации public-поля как члена класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перед каждым вторым отрицательным значением в массиве вставить нулевое значение http://www.cyberforum.ru/cpp-beginners/thread1213220.html
Дан вещественный массив. Перед каждым вторым отрицательным значением в вещественном массиве вставить нулевое значение.
C++ Найти среднее квадратическое для положительных элементов матрицы, стоящих на парных местах Задано одномерная матрица А(10).Розщитать среднее квадратическое для положительных элементов,что стоят на парныъ местах . http://www.cyberforum.ru/cpp-beginners/thread1213208.html
Бинарные деревья C++
Компилятор выдаёт ошибки в 9, 10 и 12, 13 строках: invalid conversion from 'int' to 'sNode*' Подскажите пожалуйста, что не так. struct sNode { int value; sNode *left; sNode *right; }; int Proizved (sNode *node) { if(node == 0) return 0; if(node->left)
Вычисление функции разложением в ряд C++
Помогите пожалуйста, не могу добиться корректной работы проги. Задание: Для динамического одномерного массива X из N (0<N≤20) элементов составить алгоритм и программу (консольное приложение на Си) нахождения суммы ряда с заданной точностью E (0<E<0.1) для каждого из элементов X. Использовать рекуррентные соотношения при вычислении очередного члена ряда. Вычисление суммы Sum(Xi)...
C++ Рассчитать стоимость покупки с учетом скидки http://www.cyberforum.ru/cpp-beginners/thread1213164.html
Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма покупки больше 500 руб, в 5% — если сумма больше 1000 руб. Ниже приведен рекомендуемый вид экрана во время выполнения программы (данные, введенные пользователем, выделены полужирным шрифтом). Вычисление стоимости покупки с учетом скидки.
C++ Записи. Выяснить в сколько строке символов-разделителей (пробелов, точек, тире, запятых ит.д.) Дана фраза. Выяснить, сколько в ней символов-разделителей (пробелов, точек, тире, запятых ит.д.) подробнее

Показать сообщение отдельно
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118

Запрещение переинициализации public-поля как члена класса - C++

20.06.2014, 16:58. Просмотров 305. Ответов 3
Метки (Все метки)

Здравствуйте!

Предположим, у нас есть некий класс, в нем есть public-поле, которое выполняет некоторые служебные функции.
Нужно запретить вызов конструктора поля отовсюду, кроме как из основного класса, т. е. нельзя написать:
C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
public:
    B field;
 
    A() : field { }
    { }
};
/* *** */
A a { };
a.field = B(); // baaad!
При этом, необходимо, чтобы пользователь вызывал неконстантные методы поля.
Объявить в типе поля основной класс как friend и сделать приватный конструктор невозможно - класс универсальный.
Можно сделать объявление поля через const, но тогда почти все внутренние поля придется объявлять как mutable.

Вопрос. Как подобное лучше всего сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru