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

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

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

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

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

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

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

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

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
26.05.2013, 19:27 #2
Цитата Сообщение от PreFX Посмотреть сообщение
Вроде как есть возможность вне классов перегружать этот оператор, только вот как это сделать?
ты имеешь в виду в глобальной форме?
0
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 19:28  [ТС] #3
SeregaC++, ну, похоже на то.
0
Issues
430 / 365 / 37
Регистрация: 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 / 1
Регистрация: 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 / 37
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:53  [ТС] #12
Так можно обойтись без разыменовывания указателя или нет?
0
_Mutex
Заблокирован
26.05.2013, 20:56 #13
Цитата Сообщение от PreFX Посмотреть сообщение
Так можно обойтись без разыменовывания указателя или нет?
operator << для указателя
1
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
26.05.2013, 20:57  [ТС] #14
Всё, спасибо -_-
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 21:09
Привет! Вот еще темы с ответами:

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

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

operator[][] для класса - C++
Добрый день, создал класс где храниться массив, и хотелось бы иметь напрямю доступ через по типу class Matrix { .... int ** data; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.05.2013, 21:09
Ответ Создать тему
Опции темы

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