Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение ссылок 
:(
    Опции темы
ANTON_AL
Дата 15.11.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня!


Вот такой простой примерчик:



Код

#include <conio.h>
#include <iostream>
using namespace std;



class Number
{
    public:
        Number( int a, int b )
        {
            m_A = a;
            m_B = b;
        }

        int A( ) { return m_A; }
        int B( ) { return m_B; }


        Number operator+( const Number &rhs )        //Without reference works correctly
        {
            return Number( m_A + rhs.m_A, m_B + rhs.m_B );
        }

        Number& operator*( const int Mul )
        {
            return Number( m_A * Mul, m_B * Mul );
        }


    private:
        int m_A;
        int m_B;
};


void main( )
{

    Number L( 12, 23 );
    Number R( 34, 45 );

    Number Result = ( L + R ) * 2;


    cout << Result.A( ) << endl;
    cout << Result.B( ) << endl;


    getch( );
}




Здесь всё хорошо работает. Но, если сделать, чтобы operator+ возвращал ссылку, то всё упадёт ( будет мусор у того объекта, для которого будет применяться operator* ). Почему??
PM MAIL   Вверх
Lazin
Дата 15.11.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(ANTON_AL @  15.11.2007,  15:49 Найти цитируемый пост)
        Number& operator*( const int Mul )
        {
            return Number( m_A * Mul, m_B * Mul );
        }

потому что ты возвращаешь ссылку на временный объект созданный в стеке и при выходе из функции, он уже не существует
PM MAIL Skype GTalk   Вверх
ANTON_AL
Дата 15.11.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Блин, так и знал. Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1711 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.