Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 19:00   #1
And_DaviD
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 28
По умолчанию ООП.Ошибка в манипуляторах

Код:
#include <iostream>
#include <iomanip>

using namespace std;

class Res  
{
public:
   Res();
   friend ostream& str( ostream&, Res& );
   friend ostream& Num( ostream&, Res& );   
   void printRes();
private:
   char* st;
   double a;
};


ostream& str(ostream& output, Res& numb)
{
   return output << numb.st; 
}
ostream& Num(ostream& stream, Res& numb)
{
   stream.setf(ios::left);
   stream << oct << setprecision(15)<< numb.a;
   return stream;
}

int  main ()
{
   Res pointer;
   pointer.printRes();

 return 0;
}
Res::Res()
{
    st = "dobroe utrechko";
    a = 567.235698545; // 1067
}
void Res::printRes()
{
   cout << str << endl;
   cout << endl;
   cout << Num << endl;
}
Манипулятор выводит адрес вместо строки и числа. Помогите исправить.

Последний раз редактировалось MaTBeu; 12.02.2010 в 19:47.
And_DaviD вне форума Ответить с цитированием
Старый 12.02.2010, 19:19   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

ну как минимум у тебя функции str и Num даже не вызываются... (пропиши какой либо вывод в них).

P.S. на сколько я привык ))) и вроде как оно есть, что бы вызвать функцию надо name_fun(parametrs ...), т.е. скобки надо обязательно, а у тебя тока адреса функций.
Я ток однажды встречал использование имен функции без скобок - и то это имя выступало параметром для другой функции.

Последний раз редактировалось BleStaR; 12.02.2010 в 19:22.
BleStaR вне форума Ответить с цитированием
Старый 12.02.2010, 19:26   #3
And_DaviD
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от BleStaR Посмотреть сообщение
ну как минимум у тебя функции str и Num даже не вызываются... (пропиши какой либо вывод в них).

P.S. на сколько я привык ))) и вроде как оно есть, что вызвать функцию надо name_fun(parametrs ...) а у тебя тока адреса функций.
это манипуляторы. А вызываются они в функции
Код:
void Res::printRes()
{	
	cout << str << endl;
	cout << endl;
	cout << Num << endl;
}
And_DaviD вне форума Ответить с цитированием
Старый 12.02.2010, 20:07   #4
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

с манипуляторами раньше не работал, но из краткой теории и метода тыка:
1.твои манипуляторы не выполняются вообще, как уже говорил добавь туда любой вывод и увидишь.
2.добился их выполнения путем уборки второго параметра (ибо на тока что найденных примерах нашел манипуляторы с одним параметром) и следовательно замены numb.st и numb.a на любые другие соответсвующие значения.

О том как же им передать данные о значениях st и a. Надо подумать еще
BleStaR вне форума Ответить с цитированием
Старый 12.02.2010, 20:54   #5
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

я тут разбираюсь потихоньку с манипуляторами, и по моему ты не правильно их понимаешь. Ты хотел использовать манипулятор просто для вывода значения? (как обычную функцию)
BleStaR вне форума Ответить с цитированием
Старый 12.02.2010, 21:00   #6
And_DaviD
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от BleStaR Посмотреть сообщение
я тут разбираюсь потихоньку с манипуляторами, и по моему ты не правильно их понимаешь. Ты хотел использовать манипулятор просто для вывода значения? (как обычную функцию)
вообщем, у меня задание:
Написать программу с двумя своими манипуляторами. Один выводит сообщение, другой устанавливает восьмеричный вывод и точность 15.
And_DaviD вне форума Ответить с цитированием
Старый 12.02.2010, 21:08   #7
And_DaviD
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 28
По умолчанию

На другом форуме сказали, что надо делать через прокси сервер )) Эх, теперь это учить (((
And_DaviD вне форума Ответить с цитированием
Старый 12.02.2010, 21:23   #8
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

)))
а вот задание надо было сразу уточнить. у тебя оба манипулятора без параметров!!! (я уже в принципе почти разобрался и с параметрами))))
BleStaR вне форума Ответить с цитированием
Старый 12.02.2010, 21:43   #9
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

И возрадуемся!!! Вот один из вариантов выполнения задания (есть как минимум еще один, с ним пока что разбираюсь):
Код:
#include <vcl.h>
#include <iostream>
#include <iomanip>

using namespace std;

class MyManip1{}myManip1;
ostream& operator<<(ostream& os, MyManip1 a){
         return os<<oct<<setprecision(15);
}
class MyManip2{}myManip2;
ostream& operator<<(ostream& os, MyManip2 a){
         return os<<"MyMessage";
}

int main(int argc, char* argv[])
{
        cout<<myManip1<<12.3424543455<<endl<<myManip2<<endl<<"ypa";

        int end;
        cin>>end;
        return 0;
}

Последний раз редактировалось BleStaR; 12.02.2010 в 21:51.
BleStaR вне форума Ответить с цитированием
Старый 12.02.2010, 22:38   #10
And_DaviD
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 28
По умолчанию

действительно, работает ))
And_DaviD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП dr.Chas Общие вопросы по программированию, компьютерный форум 59 03.02.2010 15:40
ООП:Ошибка при компиляции в C++Builder RABERT C++ Builder 1 19.12.2009 20:36
ООП AlekDruzh Паскаль, Turbo Pascal, PascalABC.NET 0 09.09.2009 20:32
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55