Страница 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
Не смотря на просто отвратительный стиль и манеру написанного, передачи и получения параметров по значению, непринятия принципов ООП... а так же, как по-мне отсутствие смысла в данной операции "*"...
У Вас все получится, если вы вынесете свой оператор за пределы класса. Оператор который вы могли бы определить внутри класса выглядит следующим образом
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
Вот именно поэтому пример и бессмысленный!
