Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
1

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

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

Author24 — интернет-сервис помощи студентам
Сабж. Все компелится нормально. Если делать << 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
    }
    */
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2012, 13:49
Ответы с готовыми решениями:

Выдает адрес вместо значения
Привет. Функция шоу эрэй должна отображать значения в массиве, но выдает адреса (помоему...). Где...

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

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

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

4
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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)
1
7 / 7 / 3
Регистрация: 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
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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 ; 
}
1
7 / 7 / 3
Регистрация: 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 ; 
}

Спасибо большое !
0
26.07.2012, 15:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2012, 15:38
Помогаю со студенческими работами здесь

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

Вместо значения из таблицы выдает значение параметра запроса
Пытаюсь получить данные из базы. Если передавать в запрос параметры: public client() ...

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

Перегрузка потокового ввода/вывода
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru