Страница 1 из 2

Добавлено: 03 июл 2010, 13:36
Lotles
Почему не работает ?

Код: Выделить всё

#include "stdafx.h"
#include <conio.h>
using namespace std;
class Point{
public:
    double x,y;
	Point operator*(int n, Point pt){
    Point new_pt;
    new_pt.x=pt.x*n;
    new_pt.y=pt.y*n;
    return new_pt;
	}
};
int main()
{
    Point point1,point2;
    point2.x=2.0;
    point2.y=3.0;
    point1=5*point2;
}

Re: friend

Добавлено: 03 июл 2010, 19:08
guest_48
Не смотря на просто отвратительный стиль и манеру написанного, передачи и получения параметров по значению, непринятия принципов ООП... а так же, как по-мне отсутствие смысла в данной операции "*"...

У Вас все получится, если вы вынесете свой оператор за пределы класса. Оператор который вы могли бы определить внутри класса выглядит следующим образом

Код: Выделить всё

 Point& operator*( const Point&  pt);

Re: friend

Добавлено: 03 июл 2010, 19:34
Lotles
По другому задам вопрос
Кто нибудь по-человечески объясните мне зачем здесь нужен friend

Код: Выделить всё

#include "stdafx.h"
#include <conio.h>
using namespace std;
class Point{
public:
    double x,y;
   friend  Point operator*(int n, Point pt){
    Point new_pt;
    new_pt.x=pt.x*n;
    new_pt.y=pt.y*n;
    return new_pt;
    }
};
int main()
{
    Point point1,point2;
    point2.x=2.0;
    point2.y=3.0;
    point1=5*point2;
}

Re: friend

Добавлено: 03 июл 2010, 20:58
guest_48
Если касательно этого примера, то он там не нужен.
А если глобально - объявляя функции "друзья" вы позволяете этим функция обращаться к protected и private членам (методам и данным) класса.

Если хотите подискутировать, icq 177123272

Re: friend

Добавлено: 03 июл 2010, 22:08
Lotles
guest_48 писал(а):Если касательно этого примера, то он там не нужен.
А если глобально - объявляя функции "друзья" вы позволяете этим функция обращаться к protected и private членам (методам и данным) класса.

Если хотите подискутировать, icq 177123272
У меня без friend не компилируется, а с ним нормально идет, да и в книге с friend написано, тока непонятно объеснено почему так надо

Re: friend

Добавлено: 03 июл 2010, 22:34
guest_48
Lotles писал(а):У меня без friend не компилируется, а с ним нормально идет, да и в книге с friend написано, тока непонятно объеснено почему так надо

Теперь вам понятно зачем нужно ключевое слово "friend"?

А в качестве книги для начинающих, я рекомендую Стивена Прата "Язык программирования С++"
или читайте "классику" Бьерн Страуструп "Язык программирования С++" 3 издание

А свою книгу лучше сожгите, если этот пример из неё =)

Re: friend

Добавлено: 03 июл 2010, 23:34
Lotles
guest_48 писал(а):Теперь вам понятно зачем нужно ключевое слово "friend"?

А в качестве книги для начинающих, я рекомендую Стивена Прата "Язык программирования С++"
или читайте "классику" Бьерн Страуструп "Язык программирования С++" 3 издание

А свою книгу лучше сожгите, если этот пример из неё =)
Книга C++ без страха, которую я читаю нормальная, просто в этой теме автор немного не понятно объяснил, тем более что с friend прога действительно работает, тока как, -не могу понять, friend обеспечивает доступ к закрытой части класса через объекты- это я знал, значит что то еще делает !

Re: friend

Добавлено: 04 июл 2010, 01:47
guest_48
Не понимаю, что конкретно вы не можете понять, потому что пример достаточно простой. Глобальный оператор делается френдом, friend обеспечивает доступ к закрытой части класса - всё!
Но этот код странный тем, что реализация глобального оператора френда внесена в объявление(тело) класса... такая запись для неокрепшего разума противопоказана, а опытным разработчикам за эту запись следует отбивать руки :)

Обратите внимание, что внутри этого оператора вы не можете написать this->x... что как бы намекает...

Re: friend

Добавлено: 04 июл 2010, 15:29
Lotles
guest_48 писал(а):Не понимаю, что конкретно вы не можете понять, потому что пример достаточно простой. Глобальный оператор делается френдом, friend обеспечивает доступ к закрытой части класса - всё!
Но этот код странный тем, что реализация глобального оператора френда внесена в объявление(тело) класса... такая запись для неокрепшего разума противопоказана, а опытным разработчикам за эту запись следует отбивать руки :)

Обратите внимание, что внутри этого оператора вы не можете написать this->x... что как бы намекает...

Глобальный оператор обеспечивает доступ к закрытой части класса pt.x и pt.y - так x и y объявлены же в public, где тут закрытая часть?

Re: friend

Добавлено: 05 июл 2010, 00:16
guest_48
Вот именно поэтому пример и бессмысленный! :)