Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/22: Рейтинг темы: голосов - 22, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
1

Friend Function

11.08.2010, 12:29. Показов 4494. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я не очень понимаю как пользаватса Friend функцыей

Class.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include "iostream"
 
using namespace std;
class KBADPAT
{
public:
     double a;
public:
     double pr (KBADPAT L)
    {
         double P;
    P=a*4;
    return P;
    }
    double sq (KBADPAT L)
    {
        double S;
        S=a*a;
        return S;
    };
    KBADPAT (double _a)
    {
        a=_a;
    }
    void Show (KBADPAT L)
    {
        cout<<"Perimetr: "<<pr(L)<<endl;
        cout<<"Square: "<<sq(L)<<endl;
    }
    ~KBADPAT()
    {
    };
};
1.2.Cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include "Class.h"
#include "conio.h"
 
 
int main()
{
    KBADPAT K(5);
    K.pr(K);
    K.Show(K);
    getch();
    return 0;
}
Как мне суда влепить friend функцыи подскажыте пожалусто ... (По заданию нужно)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2010, 12:29
Ответы с готовыми решениями:

C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
выкидывает C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be...

friend function
После добавления дружественной ф-ции sum( а она для сложения salary у человека, которого я выберу)...

friend function
Помогите плз разобраться: Когда я делаю инкремент &quot;х&quot; через закрытые функции класса - все работает...

Friend Function - C++
мне нужно введенную строчку передать в библиотеку , танцевал с бубном со всех сторон может кто...

23
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
11.08.2010, 13:47 2
C++
1
2
3
4
5
class KBADPAT
{
friend void f();
};
void f();
Глобальная функция теперь является другом класса KBADPAT
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
11.08.2010, 14:25  [ТС] 3
ее не особо понял) ет типо мне стоит описать:
а как френд фанкшен??
void f(); - зачем ет ? обясни пожалусто если не трудно
и как мне цеплять дальше ету функцыю как ею вобще ползьаватса зарание спс
0
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
11.08.2010, 18:21 4
ключевое слово friend предназначено для взаимодействия нескольких классов/функций.
если void f();обозначена как friend- она является другом класса и имеет доступ ко всем его переменным как и сам класс с теми же правами доступа.
P.s выложите все задание.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 18:22 5
Алсо, не следует злоупотреблять friend функциями и пихать их где не попадя. Это так, на всякий случай.
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 10:17  [ТС] 6
Координати вершин, конструктор з параметрами, метод обчислення площини та периметра з виведенням результату, методи ініціювання та закриття графічного режиму, дружня функція побудови квадрата Описати клас, об’єкт; обчислити та вивести площу і периметр; візуалізувати фігуру, яку презентує об’єкт


P.S. делать в графическом режиме не нужно
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 10:19 7
Andryushchenko,

Не по теме:

Ну переводите ж вы на русский то задание...


Что вообще значит "Построения квадрата"? Графика что-ли, или как?
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 10:47  [ТС] 8
Короче ) координаты сторон, конструктор с параметрами, метод для нахождения периметра и площади с выведением на екран... и использование дружественых функцый (я все то написал а вот как функцыи влепить ума не приложу) ). вот ето все мое задание Графику вообще не нада трогать мы ее ещо не учили ...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 10:48 9
Andryushchenko, Ну раз это все твое задание у тебя уже сделано.
Я бы конечно не издевался так над языком, а назвал бы класс Square ну и далее соответственно. И площадь это все же Area а не square... ЗЫ Что такое построить квадрат? Как ты это понимаешь? Я это могу представить либо заданием параметра (что у тебя уже есть, но зачем тут друж. функция, тогда не понятно), либо графикой
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 10:56  [ТС] 10
ну препод сказал влепите дружественую функцыю и посмотрите как она работает ... я то все задание зделал но зацыклился с етими функцыями ... ( я тоже не вижу смысл их использовать програма както начинает страно работать )
P.S. сорь за то что изковеркал классы :Д писал на скорую руку, спс я не оч силен в английском ) буду знать на будущие
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 11:02 11
Andryushchenko, Вмути перегрузку ввода-вывода... Если хочешь посмотреть как работают friend.

C++
1
2
3
4
5
6
7
8
9
10
11
istream& operator >>(istream& is, KBADRAT&Ob)
{
   cout<<"Enter size of square: "; 
   is>>Ob.a;
}
 
ostream& operator <<(ostream& os, KBADRAT&Ob)
{
   os<<"Size of square: "<< Ob.a <<'\n';
   return os;
}
В классе прототипы должны быть такие:

C++
1
2
friend istream& operator >>(istream& is, KBADRAT&Ob);
friend ostream& operator <<(ostream& os, KBADRAT&Ob);
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 11:28  [ТС] 12
Сорь за тупость не оч понял куда ето впихнуть но щас попробую чото нахимичить...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 11:30 13
Andryushchenko, Смотри. В класс пихаешь прототипы. В public секцию. Остальное реализуешь где угодно. Но так как у тебя h файл, то в том же файле где конструктор и прочее, но отдельно
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 11:48  [ТС] 14
ЫЫ чото много ошыбок :Д ща попробую пошоманить
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 11:56 15
Andryushchenko, Скинь ошибки. Я мог быть в чем-то не прав. ЗЫ, чтобы ввести/вывести значение, в main-е соответственно пишешь. cin>>K; cout<<K;
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.08.2010, 12:09 16
Пример перегрузки операторов >>, <<:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
class A
{
public:
  A()
    : val() {}
  
  friend std::ostream& operator << (std::ostream& os, const A& rhs);
  friend std::istream& operator >> (std::istream& is, A& rhs);
 
private:
  int val;
};
 
std::ostream& operator << (std::ostream& os, const A& rhs)
{
  os << rhs.val;
  return os;
}
 
std::istream& operator >> (std::istream& is, A& rhs)
{
  is >> rhs.val;
  return is;
}
 
int main()
{
  A a;
  std::cout << "Input an integer: ";
  std::cin >> a;
  std::cout << "You've entered " << a << std::endl;
  return EXIT_SUCCESS;
}
Обобщая сказанное выше - friend-функции - это функции, которые могут работать с закрытыми членами класса. Объявляется она со спецификатором friend внутри объявления класса, а определяется точно так же, как и обычные функции (естественно, без спецификации класса, в котором она объявлялась)
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 14:04  [ТС] 17
Error 1 error C2059: syntax error : 'public' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 11 1.2
Error 2 error C2059: syntax error : 'public' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 13 1.2
Error 3 error C2255: 'friend' : not allowed outside of a class definition c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 14 1.2
Error 4 error C2061: syntax error : identifier 'KBADRAT' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 14 1.2
Error 5 error C2805: binary 'operator >>' has too few parameters c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 14 1.2
Error 6 error C2255: 'friend' : not allowed outside of a class definition c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 15 1.2
Error 7 error C2061: syntax error : identifier 'KBADRAT' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 15 1.2
Error 8 error C2805: binary 'operator <<' has too few parameters c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 15 1.2
Error 9 error C2062: type 'double' unexpected c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 28 1.2
Error 10 error C2143: syntax error : missing ';' before '{' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 29 1.2
Error 11 error C2447: '{' : missing function header (old-style formal list?) c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 29 1.2
Error 12 error C2061: syntax error : identifier 'KBADRAT' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 37 1.2
Error 13 error C2805: binary 'operator >>' has too few parameters c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 38 1.2
Error 14 error C2065: 'Ob' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 40 1.2
Error 15 error C2228: left of '.a' must have class/struct/union c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 40 1.2
Error 16 error C2061: syntax error : identifier 'KBADRAT' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 43 1.2
Error 17 error C2805: binary 'operator <<' has too few parameters c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 44 1.2
Error 18 error C2065: 'Ob' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 45 1.2
Error 19 error C2228: left of '.a' must have class/struct/union c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 45 1.2
Error 20 error C2588: '::~KBADPAT' : illegal global destructor c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 48 1.2
Error 21 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 49 1.2
Warning 22 warning C4508: 'KBADPAT' : function should return a value; 'void' return type assumed c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 50 1.2
Error 23 error C2059: syntax error : '}' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 51 1.2
Error 24 error C2143: syntax error : missing ';' before '}' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 51 1.2
Error 25 error C2059: syntax error : '}' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\class.h 51 1.2
Error 26 error C2146: syntax error : missing ';' before identifier 'K' c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 8 1.2
Warning 27 warning C4551: function call missing argument list c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 8 1.2
Error 28 error C3861: 'K': identifier not found c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 8 1.2
Error 29 error C2065: 'K' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 9 1.2
Error 30 error C2228: left of '.pr' must have class/struct/union c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 9 1.2
Error 31 error C2065: 'K' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 9 1.2
Error 32 error C2065: 'K' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 10 1.2
Error 33 error C2228: left of '.Show' must have class/struct/union c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 10 1.2
Error 34 error C2065: 'K' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\учусь\1.2\1.2.cpp 10 1.2

//Я все разместил в .h я не знаю что такое острим ((( если можно дайте инфу мну темному
#include <stdio.h>
#include "iostream"

using namespace std;
class KBADPAT
{

friend void f();
};
void f();
public:
double a;
public:
friend istream& operator >>(istream& is, KBADRAT&Ob);
friend ostream& operator <<(ostream& os, KBADRAT&Ob);
double pr (KBADPAT L)
{
double P;
P=a*4;
return P;
}
double sq (KBADPAT L)
{
double S;
S=a*a;
return S;
};
KBADPAT (double _a)
{
a=_a;
}
void Show (KBADPAT L)
{
cout<<"Perimetr: "<<pr(L)<<endl;
cout<<"Square: "<<sq(L)<<endl;
}
istream& operator >>(istream& is, KBADRAT&Ob)
{
cout<<"Enter size of square: ";
is>>Ob.a;
}

ostream& operator <<(ostream& os, KBADRAT&Ob)
{
os<<"Size of square: "<< Ob.a <<'\n';
return os;
}
~KBADPAT()
{
};
};

P.S. скорее всего я что то не туда ввел ...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 14:06 18
Andryushchenko, ой ой ой... Сейчас подправлю код.
0
0 / 0 / 0
Регистрация: 11.08.2010
Сообщений: 29
12.08.2010, 14:08  [ТС] 19
Цитата Сообщение от Nameless One Посмотреть сообщение
Пример перегрузки операторов >>, <<:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
class A
{
public:
  A()
    : val() {}
  
  friend std::ostream& operator << (std::ostream& os, const A& rhs);
  friend std::istream& operator >> (std::istream& is, A& rhs);
 
private:
  int val;
};
 
std::ostream& operator << (std::ostream& os, const A& rhs)
{
  os << rhs.val;
  return os;
}
 
std::istream& operator >> (std::istream& is, A& rhs)
{
  is >> rhs.val;
  return is;
}
 
int main()
{
  A a;
  std::cout << "Input an integer: ";
  std::cin >> a;
  std::cout << "You've entered " << a << std::endl;
  return EXIT_SUCCESS;
}
Обобщая сказанное выше - friend-функции - это функции, которые могут работать с закрытыми членами класса. Объявляется она со спецификатором friend внутри объявления класса, а определяется точно так же, как и обычные функции (естественно, без спецификации класса, в котором она объявлялась)
ага суть я уловил ... токо что такое istream and ostream я не знаю(( темный я-- хотя если я чисто теоретически предоложу то ето для вывода и ввода на екран ?? если да то я просто не таким пользуюсь и не сразу уловил суть не таким записом я сразу библиотеку подключаю а не в коде вставляю))
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2010, 14:15 20
std::ostream - потоковый класс вывода
std::istream - потоковый класс ввода

Самый логичный способ продемонстрировать использование Friend функций.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// .h файл.
#include <stdio.h>
#include "iostream"
 
using namespace std;
class KBADPAT
{
public:
         double a;
public:
         double pr (KBADPAT L)
        {
                 double P;
        P=a*4;
        return P;
        }
        double sq (KBADPAT L)
        {
                double S;
                S=a*a;
                return S;
        }
        KBADPAT (double _a)
        {
                a=_a;
        }
        void Show (KBADPAT L)
        {
                cout<<"Perimetr: "<<pr(L)<<endl;
                cout<<"Square: "<<sq(L)<<endl;
        }
        ~KBADPAT()
        {
        }
        friend ostream& operator <<(ostream& os, const KBADPAT& Ob);
        friend istream& operator >>(istream& is, KBADPAT& Ob);
};
 
ostream& operator <<(ostream& os, const KBADPAT& Ob)
{
   os<<"Size of square: "<< Ob.a <<'\n';
   return os;
}
 
istream& operator >>(istream& is, KBADPAT& Ob)
{
   std::cout<<"Enter size of square: ";
   is>>Ob.a;
   return is;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//cpp файл.
#include "Class.h"
#include "conio.h"
 
using namespace std;
 
int main()
{
        KBADPAT K(5);
        K.pr(K);
        K.Show(K);
        cin>>K;
        cout<<K;
        getch();
        return 0;
}
0
12.08.2010, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2010, 14:15
Помогаю со студенческими работами здесь

Friend function
Нужно сделать функции Length и Angle френдовыми для другого класса. Как это запилить? Sect.h...

Virtual friend function
&lt;&lt;Виртуальный метод не может объявляться с модификатором static, но может быть объявлен как...

Friend function and Overload <<(>>)
#include &lt;iostream&gt; using namespace std; class array{ private: unsigned int size; int...

friend function C++ and operator ::
привет подскажите пожалуйста в чем ошибка? где не понимаю? допустим есть класс class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru