Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Член класса, создаваемый конструктором с параметром

17.02.2012, 13:47. Показов 3023. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
 public:
  class B
  {
   ...
   B(A *param); // Как открыть этот конструктор классу A, но закрыть его ото всех остальных частей программы?
   ...
  };
 B b; // Как создать этот член с помощью конструктора B::B(A *param)?
 ...
};
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2012, 13:47
Ответы с готовыми решениями:

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Динамически создаваемый массив в свойствах класса
Вот так нельзя же делать? , вопрос почему? class A { public static $path = ; }

Член-ссылка на другой член класса
Есть класс Dot с двумя членами - x и y. Требуется еще один класс, который хранит width i height, но реализация этого класса ничем не...

23
Заблокирован
17.02.2012, 20:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от retmas Посмотреть сообщение
для установления таких связей нам и не нужно на это полагаться. мы вообще эти значения не используем. а то, что не следует использовать эти значения каким-либо образом я уже ранее писал
Только гарантий таких не существует. Получатели this объекта не делают предположений, можно ли его дергать, или ещё нельзя. Иначе - нарушение инкапсуляции и инварианта класса.

В многоэтажной архитектуре проконтролировать "что где можно, а что где нельзя" будит не просто.
Если кто нибудь в такой архитектуре дернет то, что дергать не положено - будет очень мерзкая ошибка, а отладчик - ваш лучший друг на многие часы.

Есть более красивое и простое решение: "того, чего дергать нельзя - не должно быть".
Бритва Оккама: "если возможность не должна быть использована, то самой такой возможности не должно быть".

/ps если значение аргумента не используется, зачем вообще нужен такой аргумент?

В общем, сама по себе необходимость передавать this в списке инициализации - признак ущербной архитектуры. Всегда можно сделать все тоже самое, только проще и безопаснее.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12848 / 7597 / 1766
Регистрация: 25.07.2009
Сообщений: 13,985
17.02.2012, 20:27
Цитата Сообщение от retmas Посмотреть сообщение
думаю, если бы ТС обозначил, чего он хочет добиться, какого поведения/логики, дискуссия была бы короче, а может и не имела бы места быть. а так каждый додумывает свое...
Самая разумная мысль во всей теме.

Цитата Сообщение от taras atavin Посмотреть сообщение
Закрыть надо только конструктор и деструктор: задача просто блокировать возможность существования экземпляров класса A::B вне экземпляров класса A, то есть гарантировать, что любой экземпляр класса A::B будет членом класса A, но при этом сами экземпляры класса A::B и все public члены класса A::B должны быть доступны извне, а private-члены класса A::B должны быль доступны только из самого класса A::B и недоступны из класса A.
Ну так сделайте в классе А функции-обёртки к открытым функциям класса В. Вообще действительно не понятно, за чем нужно в конструктор объекта В передавать указатель на объект А, внутри которого (и только там) этот самый объект класса В и существует.

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
будит не просто
Горбатого могила правит.

0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.02.2012, 20:30
Цитата Сообщение от Bers Посмотреть сообщение
Только гарантий таких не существует. Получатели this объекта не делают предположений, можно ли его дергать, или ещё нельзя.
вопрос таких гарантий - это уже вопрос проектирования класса: установление связи и инициализация данных - суть разные вещи.
Цитата Сообщение от Bers Посмотреть сообщение
если значение аргумента не используется, зачем вообще нужен такой аргумент?
для установления связи с агрегирующим(производным в случае наследования) объектом. использование его может потребоваться позже.
Цитата Сообщение от Bers Посмотреть сообщение
инициализации - признак ущербной архитектуры
ничем не подкрепленное утверждение.
Qt ущербен... слышал много мнений о Qt, но такого мягко говоря не часто.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.02.2012, 10:52  [ТС]
Цитата Сообщение от Bers Посмотреть сообщение
В общем, сама по себе необходимость передавать this в списке инициализации - признак ущербной архитектуры.
A - агрегат, B - часть. Так как это агрегация, то экземпляры B не могут существовать вне экземпляров A, а время существования A и B совпадает. Но при этом интерфейс B является частью интерфейса A. Кроме того, B должен иметь доступ ко всем public-членам A, в том числе, несколько экземпляров B внутри одного экземпляра A должны иметь перекрёстный доступ друг к другу. Как это ещё может быть реализовано, кроме ссылки owner, реализованной через указатель? И откуда взять адрес для значения этого указателя?
Цитата Сообщение от easybudda Посмотреть сообщение
Ну так сделайте в классе А функции-обёртки к открытым функциям класса В
Ну так они и будут непосредственно в A. Может вообще тогда выбросить все классы нафиг и вернуться к процедурному программированию? Нужен именно объект-часть, предоставляющий наружу часть интерфейса объекта-агрегата.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2012, 10:52

Приведите пример класса с методом и конструктором. Создайте экземпляр этого класса. Правильный ли пример?
class Point { int х, у; Point(int х, int у) { this.x = х; this.у = у; } }

Непонятки с конструктором класса
Создал простенький класс, и не менее сложный конструктор и при компиляции вадает ошибки. Может компилятор нагибается потихоньку ? :) Ну или...

Дополнение класса конструктором и деструктором
Дополнить класс прямоугольника: перегруженным конструктором, деструктором и перегруженной операцией «+» (в результате добавления получается...

Инициализация полей класса конструктором
Добрый день! возникла такая проблема. Необходимо создать класс Polygon, в котором создать конструктор, принимающий один параметр -...

Создание класса с определенным конструктором
Добрый день! Буду благодарен если поможете создать класс VectorEntry который будет соответствовать данному коду: VectorEntry...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru