Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 12

Доступ к полю умного указателя

16.12.2017, 01:13. Показов 2070. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Реализовал умный указатель. Появилась проблема:
Если обращаться через перегруженный ->(селектор) к объекту класса SmartPointer, то без проблем доступны методы поля Object. Но стоит мне передать указатель на этот объект, допустим, в перегруженный оператор ввода (пример 3), то методы поля Object становятся закрытыми и получить доступ к ним невозможно.
Вопрос:
Как получить доступ к методам поля Object, если я передаю указатель на объект класса SmartPointer?

Умный указатель.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class SmartPointer
{
    private:
    Machine* Object;
public:
    SmartPointer();
    SmartPointer(const Machine& machine);
    Machine* operator->();
    Machine operator*();
    bool isEmpty();
    void nullObj();
    void operator=(const Machine&);
    void Info(int);
    ~SmartPointer();
};
Реализация перегрузок указателя.
C++
1
2
3
4
5
6
7
8
9
Machine* SmartPointer::operator->()
{
    return Object;
}
 
Machine SmartPointer::operator*()
{
    return *Object;
}
Пример использования указателя на объект класса SmartPointer.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ostream& operator<<(ostream& stream, SmartPointer* object) {
    
    char t;
    if (typeid(stream) == typeid(ofstream))
        t = ' ';
    else
        t = '|';
    stream << fixed; //ниже приведены методы поля Object в SmartPointer
    stream << setw(15) << object->getName() << t; 
    stream << setw(10) << object->getInventoryNumber() << t;
    stream << setw(10) << setprecision(2) << object->getPowerComsumption() << t;
    stream << setw(6) << object->getCount() << t;
    return stream;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2017, 01:13
Ответы с готовыми решениями:

Реализация умного указателя
Добрый вечер. Сегодня с умным указателем поиграться. Написал обгортку : #pragma once template &lt;typename T&gt; class UniquePtr...

Использование умного указателя std::weak_ptr
Есть вот такой код иерархии классов. Нужно в последнем классе list, вместо динамического массива compos *arr, реализовать динамический...

Проверить правильность реализации умного указателя
? template&lt;class T&gt; class Auto_Ptr { public: Auto_Ptr(); explicit Auto_Ptr(T* alloc); virtual ~Auto_Ptr(); ...

3
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
16.12.2017, 01:29
Лучший ответ Сообщение было отмечено WhineZ как решение

Решение

Я с этими умными указателями не очень понимаю как что происходит, но вот так должно, вроде, работать
C++
1
stream << setw(15) << (*object)->getName() << t;
1
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 12
16.12.2017, 01:43  [ТС]
Увы, но нет(
UPD. Поторопился. Почему то когда я так делал - не работало)

Добавлено через 3 минуты
Если не сложно, могли бы вы смысл этого выражения объяснить? а то я не очень понимаю что это выходит)
0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732
16.12.2017, 01:58
Как я понимаю - оператор доступа по указателю определен для объекта, а не для указателя,поэтому сначала надо разыменовать указатель.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2017, 01:58
Помогаю со студенческими работами здесь

Утечка при комбинации сырого и умного указателя
После выхода из блока shared_ptr вызывает деструкторы объектов, но они почему-то остаются в unordered_set и последний for их успешно...

Не выводится сообшения от деструктора для умного указателя
#ifndef Shared_ptr_H #define Shared_ptr_H template&lt;class T&gt; class shared_ptr { private: struct storage { T*...

Передача умного указателя в функцию принимающую указатель на указатель
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Ошибка умного указателя для формы
Приветствую. В хедере главной форме объявляю умный указатель на вторую форму: private: // User declarations std::unique_ptr...

Написать шаблон умного указателя для массива
Добрый день уважаемые! Не могу решить 2 задачи! 1. У вас есть многосвязный список‚ заданный следующим образом: struct...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru