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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Friend как правильно написать функцию, Добавить в класс глобальную функцию 
V
    Опции темы
Dikey
Дата 6.2.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Подскажите пожалуйста как правильно описать функцию умножения объекта на число,
если к ней дописать friend то функция получит доступ к приватным членам данных, 
но если функция объявлена в классе она уже имеет такой доступ,так что же даст в таком случае friend??
И как правильно описать эту функцию без использования дополнительных функций??
Код

Point operator*(int n,Point pt);


Если прописать функцию встроенной 
Код

Point operator*(int n){mult_n(pt,n);}//mult_n функция умножения на число

то это отлично работающий код.

Это сообщение отредактировал(а) Dikey - 6.2.2010, 10:34
PM MAIL WWW ICQ Skype   Вверх
artsb
Дата 6.2.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(Dikey @  6.2.2010,  10:18 Найти цитируемый пост)
так что же даст в таком случае friend??

Код

// функция-член класса
Point operator*(int n){mult_n(pt,n);}
// ...
// friend-функция
//Point operator*(int n,Point pt);
// ...
Point p, r;
//...
r = p * 5; // ok
r = 5 * p; // ошибка

Если раскомментировать строку Point operator*(int n,Point pt), то ошибки не будет.

Цитата(Dikey @  6.2.2010,  10:18 Найти цитируемый пост)
И как правильно описать эту функцию без использования дополнительных функций??

ничего не понял smile

Это сообщение отредактировал(а) artsb - 6.2.2010, 11:05


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Dikey
Дата 6.2.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Цитата

ничего не понял smile

В чем тут ошибка?

Код

class Point{
    private:
            int x,y;
          public:
                friend Point operator*(int n,Point pt);
};


Point Point::operator*(int n,Point pt){
    Point new_pt;
    new_pt.x=n*pt.x;
    new_pt.y=n*pt.y;
    return new_pt;
}

PM MAIL WWW ICQ Skype   Вверх
artsb
Дата 6.2.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Код

class Point{
    private:
            int x,y;
          public:
                friend Point operator*(int n,Point pt);
};
Point operator*(int n,Point pt){ // <- здесь
    Point new_pt;
    new_pt.x=n*pt.x;
    new_pt.y=n*pt.y;
    return new_pt;
}


Добавлено через 3 минуты и 48 секунд
Может будет лучше так:
Код

class Point{
    private:
            int x,y;
          public:
                Point(int _x, int _y): x(_x), y(_y) {;}
                friend Point operator*(int n,Point pt);
};
Point operator*(int n,Point pt){
    return Point(n*pt.x, n*pt.y);
}



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Dikey
Дата 6.2.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Спасибо, мой вопрос решен.
PM MAIL WWW ICQ Skype   Вверх
Dikey
Дата 6.2.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Помогите еще подобную задачку решить для класса Point.
Нужно организовать инкремент объекта pt который состоит из x и y тоесть выглядит как координаты точки, НАПРИМЕР (2,3)
Инкрементироваться должны как x так и y например:
Point pt1(2,3);
++pt1;
cout<<pt1;
даст (3,4)


Код

class Point{
        private:
                   int x,y;
        public:
                  Point operator++( список аргументов );
};

Point Point::operator++( список аргументов ){
          //инструкции;
}


Это сообщение отредактировал(а) Dikey - 6.2.2010, 13:51
PM MAIL WWW ICQ Skype   Вверх
artsb
Дата 6.2.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Код

class Point{
        private:
                   int x,y;
        public:
                  Point operator++();     // случай   ++p
                  Point operator++(int); // случай   p++
};

Point Point::operator++(){
  x++;
  y++;
  return *this;
}

Point Point::operator++(int){
    Point p(*this);
    x++;
    y++;
    return p;
}


Это сообщение отредактировал(а) artsb - 7.2.2010, 12:02


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Dikey
Дата 6.2.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

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



Большое спасибо.
PM MAIL WWW ICQ Skype   Вверх
NewDima
Дата 7.2.2010, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

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



Код

Point &operator++();
Point &operator++(int);

PM ICQ   Вверх
Albor
Дата 7.2.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



artsb, поправка. реализация постфиксной формы д.б. такой:
Код

Point Point::operator++(int){
    Point p(*this);
    x++;
    y++;
    return p;
}

Иначе разницы нет между постфиксной и префиксной формами.
PM MAIL ICQ   Вверх
artsb
Дата 7.2.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(Albor @  7.2.2010,  11:16 Найти цитируемый пост)
artsb, поправка.

Точно. Проглядел smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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