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

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

16.12.2017, 01:13. Показов 1405. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2017, 01:13
Ответы с готовыми решениями:

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

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

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

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

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

Решение

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

Добавлено через 3 минуты
Если не сложно, могли бы вы смысл этого выражения объяснить? а то я не очень понимаю что это выходит)
0
66 / 54 / 14
Регистрация: 20.12.2013
Сообщений: 499
16.12.2017, 01:58 4
Как я понимаю - оператор доступа по указателю определен для объекта, а не для указателя,поэтому сначала надо разыменовать указатель.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2017, 01:58

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.