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

C++

Войти
Регистрация
Восстановить пароль
 
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
#1

Как перегрузить функцию xcout? - C++

23.01.2009, 00:29. Просмотров 776. Ответов 6
Метки нет (Все метки)

У меня уже мозги не варят... Пожалуйста подскажите как перегрузить функцию xcout что бы в качетве аргумента она получала указалеть на символьную строку.. точнее

создать пеергруженную функцию xcout, получающую в качестве аргумента символьную строку и возращаюшую целое значение...

как я понимаю надо перегрузить << для этого я написал что-то типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
class xcout
{
private:
public:
 friend int operator<<(ostream &out, char *s);
};
int operator<<(ostream &out, char *s)
{
 ....
 return 0;
};
int main()
{
 xcout out;
 char *s=new char[256]="rem is best\n";
 out<<s;
 return 0;
}
а оно выводит ошибку...

binary '<<' : no operator defined which takes a left-hand operand of type 'class xcout' (or there is no acceptable conversion)

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2009, 00:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как перегрузить функцию xcout? (C++):

Как правильно перегрузить оператор присвоения под параметр типа AnsiString - C++ Builder
Вот делаю домашку, и проблема, моя строка ждет интов, а не самих строк AnsiString, Builder 6 стоит Вот сами класы: class CMas {...

Перегрузить оператор << для вывода дроби на форму - C++ Builder
void operator &gt;&gt; (CDrib &amp;dr,TEdit *Edit) { Edit.Text = IntToStr(dr.m_nChis); Edit.Text = IntToStr(dr.m_nZn); } ...

Какой оператор и как перегрузить для отображения строки - Visual C++
есть стандартный класс CString, ни для кого думаю не секрет что в памяти хранится кроме массива символов, еще и длинна строки и счетчик...

Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать - Visual C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #include &lt;string&gt; using namespace...

Как запихнуть функцию-член класса в глобальную функцию в качестве параметра ? - Visual C++
class A { public : float f(float); float f2(float); }; class B { public : float f(float); float f2(float); };

Перегрузить функцию возведения в степень - C++
Перегрузить функцию stepen(), в которой число x будет возводиться в степень у: а) x – целое, у – дробное; б) x – целое, у – целое; в)...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.01.2009, 01:14 #2
http://www.cyberforum.ru/cpp-beginne...post48204.html
http://www.cyberforum.ru/cpp-beginne...post47077.html
http://www.cyberforum.ru/cpp-builder...post41222.html
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
23.01.2009, 10:28  [ТС] #3
не.. Немного не то.. В приведённыйх ссылках везде (почти) указываеться параметр потока ostream &ou, а мне надо именно без него... Что-то типа int operator<<(char *s); но так как я написал нельзя... может кто подскажет почему и как это исправить...
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
23.01.2009, 10:43 #4
так попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class xcout
{
private:
    string buff;//для теста
public:
    friend xcout& operator<<(xcout &out, char *s);
};
xcout& operator<<(xcout &out, char *s)
{
    out.buff  = s;
    cout<<out.buff.c_str();
    return out;
};
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
23.01.2009, 12:00  [ТС] #5
ISergey спасибо но не получилось...

Код
'operator <<' is ambiguous
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 30.01.2009
Сообщений: 168
06.02.2009, 09:23 #6
Лучше поздно, чем никогда :ф)

Вообще, оператор << перегружается так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class xcout
{
public:
    int operator<<(const char *s);
};
 
int xcout::operator<<(const char *s)
{
    //...
    return 0;
}
 
int main()
{
    xcout out;
 
    out << "rem is best\n";
 
    return 0;
}
Правда не совсем понятно, что, собственно, программа должна была делать...
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
06.02.2009, 10:01  [ТС] #7
Спасибо подсказал прямо в яблочко как надо... Закрывайте тему...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2009, 10:01
Привет! Вот еще темы с ответами:

Перегрузить функцию вычисления площади фигуры на плоскости - C++
Помогите решить задачу : Перегрузить функцию вычисления площади фигуры на плоскости(квадрат,треугольник,прямоугольник,трапеция) с клав....

Создать и перегрузить функцию, вычисляющую максимальный элемент - C++
Создать и перегрузите функцию, вычисляющую максимальный элемент двух и трех чисел. Числа вводить с экрана. Проверить на различных наборах...

Перегрузить функцию умножения(*) для комплексных чисел - C++
нужно перегрузить функцию умножения(*) в данной задаче #include &lt;iostream&gt; using namespace std; class Complex { private: ...

Перегрузить оператор используя внешнюю функцию инкремент - C++
Суть задания такова нужно перегрузить оператор используя внешнюю функцию Инкремент. Программа не запускается пишет ошибку ( бинарный ++:...


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

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

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