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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка оператора 
:(
    Опции темы
knut
Дата 20.11.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет всем
Вот имеется сласс  в котором  перегружаются функции.

Код

class COverload
{
public:
        int m_member,m_member1,i,j;
        int m_cin;
        char *ch;
        
        std::vector<int>v_vec;
                

public:
    
    COverload():m_member(10),m_member1(20),v_vec(10){}
    COverload(int i,int j):i(m_member),j(m_member1){}
    COverload(const COverload&){};
    ~COverload(){}
        
    
      COverload operator-(const COverload  &);
      COverload operator=(const COverload  &);

    vector<int>::reference operator[](vector<int>::size_type );
    friend ostream &operator<<(ostream&, COverload &);
               friend istream &operator>>(istream&, COverload &);

};


 ostream &operator <<(ostream &os,const COverload &m_ob)
{
    os<<m_ob.m_member;
    return os;
    
}
 istream &operator>>(istream &os, COverload &m_ob)
 {
     char buffer;
     os>>buffer;

     m_ob.m_cin = buffer;
     std::cout<<"echo"<<m_ob.m_cin;
      return os;
 }

 vector<int>::reference COverload::operator [](vector<int>::size_type pos)
 {
     return v_vec[pos];
 }

Код

int main()
{
    COverload ob_overload,ob;
    ob_overload.v_vec[1] = 10;
    ob_overload.v_vec[2] = 20;
    ob[0] = ob_overload[1] + ob_overload[2];
    std::cout<<ob[0]<<endl;
    return 0;
}

1.вопрос.Я не перегружаю оператор + но почему  у меня ob[0] = ob_overload[1] + ob_overload[2] это строка работает.
2.И вообше когда нужно перегружать оператор +?
3.как перегрузить оперетор + для stl кого vector a?




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
vinter
Дата 20.11.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



это у тебя работает?
Код

 COverload ob_overload,ob;    
    ob_overload.v_vec[1] = 10;   // ошибка,вектор пустой 
    ob_overload.v_vec[2] = 20;    
    ob[0] = ob_overload[1] + ob_overload[2];   
    std::cout<<ob[0]<<endl;


Это сообщение отредактировал(а) vinter - 20.11.2006, 16:30


--------------------
Мой блог
PM MAIL WWW   Вверх
JackYF
Дата 20.11.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(knut @  20.11.2006,  16:21 Найти цитируемый пост)
ob[0] = ob_overload[1] + ob_overload[2] 


1. Ты перегрузил оператор [], который возвращает int. Логично, что два инта сложиться могут.
Слаживаются ведь не твои два экземпляра, а результаты функций, к ним примененных...

2. Когда непосредственно слаживаются два экземпляра твоих классов, например.

3. Напрямую - нельзя. Это не твой класс.
Можно только попробовать создать внешний:
Код

#include <iostream>
#include <vector>

template < typename T > std::vector<T> operator+( const std::vector<T>& v1, const std::vector<T> v2 )
{
    // тут код :)
}

int main()
{
    std::vector<int> vec1;
    std::vector<int> vec2;
        ...
    std::vector<int> vec3 = vec1 + vec2;
}






--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
knut
Дата 20.11.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

это у тебя работает????

да а что?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 20.11.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(vinter @  20.11.2006,  16:27 Найти цитируемый пост)
это у тебя работает????


Не совсем правильно, но работает... Он перегрузил operator[].



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Oleg_Ci
Дата 20.11.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Скажем так можно-было сделать.(не самый удачный вариант...)
Код

vector<int>::reference COverload::operator [](vector<int>::size_type pos)
 {
     if( pos > v_vec.size())  v_vec.resize(pos); // <<<<<
     return v_vec[pos];
 }


Это сообщение отредактировал(а) Олег4 - 20.11.2006, 17:37
PM MAIL   Вверх
knut
Дата 20.11.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



JackYF, 
ты передаеш в функц оператор + vector<T>vector . и зачем? а вить обект надо передать типа класса 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 20.11.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(knut @  20.11.2006,  16:21 Найти цитируемый пост)
3.как перегрузить оперетор + для stl кого vector a?


Задание прочитал?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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