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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
#1

operator << для указателя - C++

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

В общем, есть у меня кастомный класс, указатель на который используется практически всеми классами программы. Для самого класса перегружен <<, однако использовать богомерзкую конструкцию *(pointer)<< желания нет никакого. Вроде как есть возможность вне классов перегружать этот оператор, только вот как это сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:27     operator << для указателя #2
Цитата Сообщение от PreFX Посмотреть сообщение
Вроде как есть возможность вне классов перегружать этот оператор, только вот как это сделать?
ты имеешь в виду в глобальной форме?
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:28  [ТС]     operator << для указателя #3
SeregaC++, ну, похоже на то.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:30     operator << для указателя #4
PreFX, дай свой код, я тебе сделаю.
_Mutex
Заблокирован
26.05.2013, 19:32     operator << для указателя #5
C++
1
A operator<<(A a,B b);
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:39  [ТС]     operator << для указателя #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);
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:51     operator << для указателя #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;
}
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:56  [ТС]     operator << для указателя #8
SeregaC++, возможно, вы меня не поняли. Мне нужно работать с указателем без его разыменовывания. Как я уже показал выше, должно получиться как-то так:
C++ (Qt)
1
2
GuiManager* gui = new GuiManager;
gui << "Hello World!";
_Mutex
Заблокирован
26.05.2013, 20:09     operator << для указателя #9
C++
1
2
3
GuiManager & operator<<(GuiManager & gui,char *str){
    return gui;
};
первый никогда не указатель
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:33  [ТС]     operator << для указателя #10
_Mutex, т.е. такая конструкция с указателем невозможна?
_Mutex
Заблокирован
26.05.2013, 20:51     operator << для указателя #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;
};
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:53  [ТС]     operator << для указателя #12
Так можно обойтись без разыменовывания указателя или нет?
_Mutex
Заблокирован
26.05.2013, 20:56     operator << для указателя #13
Цитата Сообщение от PreFX Посмотреть сообщение
Так можно обойтись без разыменовывания указателя или нет?
operator << для указателя
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:57  [ТС]     operator << для указателя #14
Всё, спасибо -_-
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 21:09     operator << для указателя
Еще ссылки по теме:

C++ Vector для указателя
Operator< для класса C++
C++ Перегрузка operator< для двух экземпляров класса отрезок
Перегрузка operator>> для производного класса C++
C++ Реализовать перегрузку operator+() для пользователского класса

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

Или воспользуйтесь поиском по форуму:
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
26.05.2013, 21:09     operator << для указателя #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;
}
Yandex
Объявления
26.05.2013, 21:09     operator << для указателя
Ответ Создать тему
Опции темы

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