Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
1

operator << для указателя

26.05.2013, 19:24. Просмотров 428. Ответов 14
Метки нет (Все метки)

В общем, есть у меня кастомный класс, указатель на который используется практически всеми классами программы. Для самого класса перегружен <<, однако использовать богомерзкую конструкцию *(pointer)<< желания нет никакого. Вроде как есть возможность вне классов перегружать этот оператор, только вот как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 19:24
Ответы с готовыми решениями:

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает...

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B*...

14
Issues
430 / 365 / 149
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:27 2
Цитата Сообщение от PreFX Посмотреть сообщение
Вроде как есть возможность вне классов перегружать этот оператор, только вот как это сделать?
ты имеешь в виду в глобальной форме?
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:28  [ТС] 3
SeregaC++, ну, похоже на то.
0
Issues
430 / 365 / 149
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:30 4
PreFX, дай свой код, я тебе сделаю.
0
_Mutex
Заблокирован
26.05.2013, 19:32 5
C++
1
A operator<<(A a,B b);
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:39  [ТС] 6
Класс:
C++ (Qt)
1
2
3
4
5
class GuiManager
{
public:
    GuiManager operator << (QString str);//QString - аналог String из STL
};
Должно получиться как-то так:

C++ (Qt)
1
2
GuiManager* gui = new GuiManager;
gui << "Hello World!";
Вот на такую вот конструкцию не ругается, но при попытке запустить код выше матерится -_-
C++ (Qt)
1
GuiManager* operator << (GuiManager* gm, QString str);
0
Issues
430 / 365 / 149
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:51 7
Qt не знаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
class A 
{
    int x;
 
public:
    A(int _x): x(_x) { }
 
    friend std::ostream& operator<< (std::ostream&, const A&);
};
 
std::ostream& operator<< (std::ostream& os, const A& obj)
{
    return os << obj.x;
}
 
int main()
{
    A* p = new A(11);
 
    std::cout << *p << std::endl;
 
    system("PAUSE");
    return 0;
}
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:56  [ТС] 8
SeregaC++, возможно, вы меня не поняли. Мне нужно работать с указателем без его разыменовывания. Как я уже показал выше, должно получиться как-то так:
C++ (Qt)
1
2
GuiManager* gui = new GuiManager;
gui << "Hello World!";
0
_Mutex
Заблокирован
26.05.2013, 20:09 9
C++
1
2
3
GuiManager & operator<<(GuiManager & gui,char *str){
    return gui;
};
первый никогда не указатель
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:33  [ТС] 10
_Mutex, т.е. такая конструкция с указателем невозможна?
0
_Mutex
Заблокирован
26.05.2013, 20:51 11
Цитата Сообщение от PreFX Посмотреть сообщение
_Mutex, т.е. такая конструкция с указателем невозможна?
C++
1
2
3
4
5
6
7
8
9
10
11
12
class GuiManager{
};
 
GuiManager & operator<<(GuiManager & gui,const char *str){
    return gui;
};
 
int main(){
    GuiManager* g=new GuiManager();
    *g<<"aaa"<<"bbb";  
    return 0;
};
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:53  [ТС] 12
Так можно обойтись без разыменовывания указателя или нет?
0
_Mutex
Заблокирован
26.05.2013, 20:56 13
Цитата Сообщение от PreFX Посмотреть сообщение
Так можно обойтись без разыменовывания указателя или нет?
operator << для указателя
1
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:57  [ТС] 14
Всё, спасибо -_-
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
26.05.2013, 21:09 15
Перегрузка операторов разрешена только когда один из аргументов является объектом класса определенного пользователем. Для примитивных типов ( встроенные типы и указатели ) перегрузка не разрешается.
Если, к примеру, справа от оператора будет стоят какой то Ваш класс, то все будет работать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A {
 
};
 
class B {
 
};
 
A *operator<<( A *a, B &b ) {
   return a;
}
 
int main() {
   A *a = new A;
   B b1, b2;
   
   a << b1 << b2;
   
   return 0;
}
1
26.05.2013, 21:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 21:09

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt;...

Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...


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

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

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