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

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

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

Перегрузка потокового оператора (<<). Выдает адрес вместо значения - C++

26.07.2012, 13:49. Просмотров 746. Ответов 4
Метки нет (Все метки)

Сабж. Все компелится нормально. Если делать << void то работает ок см комменты
если делать класса std::ostream& то возвращает 16чное значение.
Заранее спасибо

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef Point_HPP // anti multiply including gates
#define Point_HPP
 
#include <sstream>
    
 
class Point
{   
    private:        //  declaration of private data members 
    double x;       // X coordinate
    double y;       // Y coordinate
 
    public: // public declaration of data members (in given example haven't ) and member functions 
 
 
        //----------- Declaration of Constructors -----------//
    Point();                                    // Default constructor
    Point(double newX, double newY);            // Constructor 
    Point (const Point& ObjectOfClassPoint);    //COPY constructor
    ~Point(); // 
 
 
    //----------- Declaration of  Accessors member functions -----------//
 
    std::ostream& ToString() ; 
    //void Point::ToString () const; 
    
    
};
 
 
//----------- Implementaion of Global Ostream << Operator  -----------//
 
/*std::ostream& operator<< (std::ostream &out, Point &cPoint) 
{
    // SHOULD BE WITHOUT friendness 
    // Point's members directly.
    out << cPoint.ToString();
        
    return out;
}*/
 
#endif // Point_HPP
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
27
28
29
30
#include <iostream>
#include "Point.hpp"
 
 
 
 
int main()
 
    {
 
 
    std::cout << "\n\t ---TEST OF Operator Overloading--- \n";
    
    Point MyPoint(1455  , 1492  );                          // Creating an object of  Point using constructor 
    Point MySecondPoint (1517   , 1796  );                  // Creating an object of  Point using constructor 
    Point MyThirdPoint (1610  , 1882   );                   // Creating an object of  Point using constructor 
    MyPoint.ToString();
    MySecondPoint.ToString();
    std::cout << "\n";
 
 
    std::cout << "\n std::cout << MySecondPoint.ToString();;\n\n\n ";
    std::cout << "\n" <<  MySecondPoint.ToString();
 
 
    std::cout << "\n ---  Now some easy math --- ";
    
 
  return 0 ; 
}
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "Point.hpp"
#include <iostream>
#include <sstream>
#include <cmath>
 
 
 
 
 
            //----------- Implementation of Constructors -----------//
 
Point::Point() : x(0), y(0)                                                         // Default constructor (implemented using colon syntax )
{ 
    std::cout << "hi my default constructor\n\n\t";
}                                       
Point::Point(double newX, double newY) : x(newX), y(newY)                           // Constructor 
{ 
    //std::cout << "hi my constructor\n\n\t"; 
}               
Point::~Point()                                                                     // Destructor
{
    //std::cout << "bye my point..\n";
}                                    
 
Point::Point (const Point& ObjectOfClassPoint)                                      // Copy constructor
        {
            //std::cout << "this is COPY constructor\n\n\t ";
            x = ObjectOfClassPoint.x;
            y = ObjectOfClassPoint.y;
 
        }
 
 
        
 
            //----------- Implementation of Accessor(s) member functions -----------//
 
std::ostream& Point::ToString ()
    
    {// Function ToString should also be const also because of reason of mistaken modification of an object's value 
        std::ostringstream os;                              // std::stringstream object
        os << " Point (" << x << ", " << y << ")\n";            // customization of output 
        os.str();                                           // str() function retrieve the string from the string buffer
        return os;
 
    }
 
 
/*void Point::ToString () const
    
    {// Function ToString should also be const also because of reason of mistaken modification of an object's value 
        std::ostringstream os;                              // std::stringstream object
        os << " Point (" << x << ", " << y << ")";          // customization of output 
        std::cout << os.str()<<"\n";                        // str() function retrieve the string from the string buffer
    }
    */
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2012, 13:49     Перегрузка потокового оператора (<<). Выдает адрес вместо значения
Посмотрите здесь:

Перегрузка оператора сложения в классе выдает ошибку с деструктором - C++
Здравствуйте, взял у Липманна программу, которую по заданию надо доработать. Ее смысл заключается в том, что объект класса (динамическая...

Cout пишет адрес вместо значения - C++
cout пишет адрес вместо значения. Спасибо

Выводится адрес переменной, вместо ее значения - C++
Пишу программу просмотра логинов и паролей из хрома. Все работает, за исключением того, что в консоль выводятся, насколько я понял, адреса...

Массив вместо своего значения выдает М - C++
Задание: определить количество положительный и отрицательных чисел, но когда показывается массив там во всех ячейках стоит М ...

Перегрузка потокового ввода-вывода - C++
Доброго времени суток!!! Возникла такая проблема: необходимо сделать перегрузку операций &lt;&lt; и &gt;&gt;. Вот что у меня есть: friend...

Перегрузка потокового ввода/вывода - C++
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень полинома=&quot;&lt;&lt;outstream.n&lt;&lt;endl; for(int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2012, 14:11     Перегрузка потокового оператора (<<). Выдает адрес вместо значения #2
Цитата Сообщение от Leeto Посмотреть сообщение
std::ostream& Point::ToString ()
{// Function ToString should also be const also because of reason of mistaken modification of an object's value
std::ostringstream os; // std::stringstream object
os << " Point (" << x << ", " << y << ")\n"; // customization of output
os.str(); // str() function retrieve the string from the string buffer
return os;
}
C++
1
2
3
4
5
6
std::string Point::ToString ()
{// Function ToString should also be const also because of reason of mistaken modification of an object's value 
    std::ostringstream os;                        // std::stringstream object
    os << "Point (" << x << ", " << y << ")"; // customization of output 
    return os.str();                                  // str() function retrieve the string from the string buffer
}
Добавлено через 1 минуту
Цитата Сообщение от Leeto Посмотреть сообщение
std::ostream& operator<< (std::ostream &out, Point &cPoint)
C++
1
std::ostream& operator << (std::ostream &out, Point const& cPoint)
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.07.2012, 14:21  [ТС]     Перегрузка потокового оператора (<<). Выдает адрес вместо значения #3
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
4
5
6
std::string Point::ToString ()
{// Function ToString should also be const also because of reason of mistaken modification of an object's value 
    std::ostringstream os;                        // std::stringstream object
    os << "Point (" << x << ", " << y << ")"; // customization of output 
    return os.str();                                  // str() function retrieve the string from the string buffer
}
Добавлено через 1 минуту

C++
1
std::ostream& operator << (std::ostream &out, Point const& cPoint)


А как мне теперь сделать так чтобы сразу можно было объект MySecondPoint послать на cout <<
Компилятор выдает Link error

C++
1
2
3
4
5
6
7
8
9
std::ostream& operator<< (std::ostream &out, Point &cPoint) 
{
    // SHOULD BE WITHOUT friendness 
    // Point's members directly.
 
    out << cPoint.ToString();
        
    return out;
}
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
27
28
29
30
31
32
33
#include <iostream>
#include "Point.hpp"
 
 
 
 
int main()
 
    {
 
 
    std::cout << "\n\t ---TEST OF Operator Overloading--- \n";
    
    Point MyPoint(1455  , 1492  );                          // Creating an object of  Point using constructor 
    Point MySecondPoint (1517   , 1796  );                  // Creating an object of  Point using constructor 
    Point MyThirdPoint (1610  , 1882   );                   // Creating an object of  Point using constructor 
    MyPoint.ToString();
    MySecondPoint.ToString();
    std::cout << "\n";
 
 
    std::cout << "\n std::cout << MySecondPoint.ToString();;\n\n\n ";
    std::cout << "\n" <<  MySecondPoint.ToString();
 
 
    std::cout << "\n ---  Now some easy math --- ";
 
    std::cout << "\n MySecondPoint;\n\n\n ";
    std::cout << MySecondPoint;
    
 
  return 0 ; 
}
PS В этом задании нельзя френдить и надо использовать ToString() и надо чтобы operator << be Global но реализован внутри hpp


1>Point.obj : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Point &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAVPoint@@@Z) already defined in main.obj

fatal error LNK1169: one or more multiply defined symbols found
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2012, 14:54     Перегрузка потокового оператора (<<). Выдает адрес вместо значения #4
point.hpp
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
27
28
29
30
#ifndef Point_HPP // anti multiply including gates
#define Point_HPP
 
#include <ostream>
#include <string>
    
class Point
{   
private:        //  declaration of private data members 
    double x;       // X coordinate
    double y;       // Y coordinate
 
public: // public declaration of data members (in given example haven't ) and member functions 
 
        //----------- Declaration of Constructors -----------//
    Point();                                    // Default constructor
    Point(double newX, double newY);            // Constructor 
    Point (const Point& ObjectOfClassPoint);    //COPY constructor
    ~Point(); // 
 
    //----------- Declaration of  Accessors member functions -----------//
    std::string ToString() const;    
};
 
 
//----------- Declaration of Global Ostream << Operator  -----------//
 
std::ostream& operator<< (std::ostream& out, Point const& cPoint); 
 
#endif // Point_HPP


Добавлено через 19 секунд

point.cpp
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "Point.hpp"
 
#include <iostream>
#include <sstream>
#include <cmath> 
  
            //----------- Implementation of Constructors -----------//
 
Point::Point() : x(0), y(0)                                                         // Default constructor (implemented using colon syntax )
{ 
    std::cout << "hi my default constructor\n\n\t";
}     
 
Point::Point(double newX, double newY) : x(newX), y(newY)                           // Constructor 
{ 
    //std::cout << "hi my constructor\n\n\t"; 
}
 
Point::~Point()                                                                     // Destructor
{
    //std::cout << "bye my point..\n";
}                                    
 
Point::Point (const Point& ObjectOfClassPoint)                                      // Copy constructor
{
    //std::cout << "this is COPY constructor\n\n\t ";
    x = ObjectOfClassPoint.x;
    y = ObjectOfClassPoint.y;
}
 
            //----------- Implementation of Accessor(s) member functions -----------//
 
std::string Point::ToString() const
{
    // Function ToString should also be const also because of reason of mistaken modification of an object's value 
    std::ostringstream os;                              // std::stringstream object
    os << " Point (" << x << ", " << y << ")\n";        // customization of output 
    return os.str();                                    // str() function retrieve the string from the string buffer
}
 
std::ostream& operator << (std::ostream& out, Point const& cPoint)
{
    // SHOULD BE WITHOUT friendness 
    // Point's members directly.
    return (out << cPoint.ToString());
}

Добавлено через 20 секунд

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "Point.hpp"
 
int main()
{
    std::cout << "\n\t ---TEST OF Operator Overloading--- \n";
    
    Point MyPoint(1455, 1492);                          // Creating an object of  Point using constructor 
    Point MySecondPoint (1517, 1796);                  // Creating an object of  Point using constructor 
    Point MyThirdPoint (1610, 1882);                   // Creating an object of  Point using constructor 
    
    std::cout << MyPoint << std::endl
        << MySecondPoint << std::endl
        << MyThirdPoint  << std::endl;
 
  return 0 ; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2012, 15:38     Перегрузка потокового оператора (<<). Выдает адрес вместо значения
Еще ссылки по теме:

Перегрузка операторов потокового ввода вывода - C++
Есть класс &quot;деканат&quot;, полем которого есть список студентов, объектов из класса &quot;Студент&quot;. Как переопределяя операторы &quot;&gt;&gt;&quot; &quot;&quot;&lt;&lt;&quot; вывести...

Перегрузка операторов потокового ввода-вывода - C++
Пожалуйста, ответе на такой вопрос: почему при написании класса, при перегрузке операторов ввода-вывода, их обязательно нужно объявлять в...

Перегрузка потокового ввода/вывода для класса с полем типа string - C++
Возможно ли перегрузить &gt;&gt; и &lt;&lt; или придётся заменить переменную string на массив char? У меня ошибка появляется: &quot;бинарный &quot;&lt;&lt;&quot;: не...

Выполните, пожалуйста, задание, при этом вместо оператора цикла while используйте оператора цикла do_while - C++
Используя оператор цикла while, напишите программу для вычисления ниже следующей суммы. // fkdj.cpp: определяет точку входа...

Перегрузка оператора - C++
Есть такой вот код: #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class LIST { T field; unsigned long long int...

Перегрузка оператора () - C++
Привет всем помогите придумать способ реализаци следущей задачи: есть класс симметричная матрица: class Matrix { ...


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

Или воспользуйтесь поиском по форуму:
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
26.07.2012, 15:38  [ТС]     Перегрузка потокового оператора (<<). Выдает адрес вместо значения #5
Цитата Сообщение от Jupiter Посмотреть сообщение
point.hpp
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
27
28
29
30
#ifndef Point_HPP // anti multiply including gates
#define Point_HPP
 
#include <ostream>
#include <string>
    
class Point
{   
private:        //  declaration of private data members 
    double x;       // X coordinate
    double y;       // Y coordinate
 
public: // public declaration of data members (in given example haven't ) and member functions 
 
        //----------- Declaration of Constructors -----------//
    Point();                                    // Default constructor
    Point(double newX, double newY);            // Constructor 
    Point (const Point& ObjectOfClassPoint);    //COPY constructor
    ~Point(); // 
 
    //----------- Declaration of  Accessors member functions -----------//
    std::string ToString() const;    
};
 
 
//----------- Declaration of Global Ostream << Operator  -----------//
 
std::ostream& operator<< (std::ostream& out, Point const& cPoint); 
 
#endif // Point_HPP


Добавлено через 19 секунд

point.cpp
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "Point.hpp"
 
#include <iostream>
#include <sstream>
#include <cmath> 
  
            //----------- Implementation of Constructors -----------//
 
Point::Point() : x(0), y(0)                                                         // Default constructor (implemented using colon syntax )
{ 
    std::cout << "hi my default constructor\n\n\t";
}     
 
Point::Point(double newX, double newY) : x(newX), y(newY)                           // Constructor 
{ 
    //std::cout << "hi my constructor\n\n\t"; 
}
 
Point::~Point()                                                                     // Destructor
{
    //std::cout << "bye my point..\n";
}                                    
 
Point::Point (const Point& ObjectOfClassPoint)                                      // Copy constructor
{
    //std::cout << "this is COPY constructor\n\n\t ";
    x = ObjectOfClassPoint.x;
    y = ObjectOfClassPoint.y;
}
 
            //----------- Implementation of Accessor(s) member functions -----------//
 
std::string Point::ToString() const
{
    // Function ToString should also be const also because of reason of mistaken modification of an object's value 
    std::ostringstream os;                              // std::stringstream object
    os << " Point (" << x << ", " << y << ")\n";        // customization of output 
    return os.str();                                    // str() function retrieve the string from the string buffer
}
 
std::ostream& operator << (std::ostream& out, Point const& cPoint)
{
    // SHOULD BE WITHOUT friendness 
    // Point's members directly.
    return (out << cPoint.ToString());
}

Добавлено через 20 секунд

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "Point.hpp"
 
int main()
{
    std::cout << "\n\t ---TEST OF Operator Overloading--- \n";
    
    Point MyPoint(1455, 1492);                          // Creating an object of  Point using constructor 
    Point MySecondPoint (1517, 1796);                  // Creating an object of  Point using constructor 
    Point MyThirdPoint (1610, 1882);                   // Creating an object of  Point using constructor 
    
    std::cout << MyPoint << std::endl
        << MySecondPoint << std::endl
        << MyThirdPoint  << std::endl;
 
  return 0 ; 
}

Спасибо большое !
Yandex
Объявления
26.07.2012, 15:38     Перегрузка потокового оператора (<<). Выдает адрес вместо значения
Ответ Создать тему
Опции темы

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