Форум программистов, компьютерный форум CyberForum.ru

Дружественнная функция и класс - C++

Восстановить пароль Регистрация
 
AfoTax
 Аватар для AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
01.05.2012, 17:05     Дружественнная функция и класс #1
Никак не пойму, почему дружественная функция не может обратиться к члену класса.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include<iostream>
using namespace std;
#include<stdlib.h>
 
template <typename T>
class cclass
{
    T *arr;
    const int size;
public:
    //cclass(int * ...);
    cclass();
    ~cclass(void);
    cclass(const cclass&);
    int get_size()const;
    int& operator[](int q);
    friend int summa(const cclass<T> &obj);
    friend istream operator>>(istream in, cclass q);
};
 
template <typename T>
int summa(const cclass<T> &obj)
{
    int sum=0;
    for(int i=0;i<obj.size;i++)
    {sum=sum+obj.arr[i];}
    return sum;
}
 
template <typename T>
cclass<T>::cclass(const cclass<T>& cl1)
{
    strcpy(arr,cl1.arr);
}
 
 
template <typename T>
istream operator>>(istream in, int q);
 
template <typename T>
int& cclass<T>::operator[](int q)
{
    if(q>=size)
    {
        cout<<"Выход за размер массива!!!!!\n";
        cout<<"Элемента с индексом "<<q<<" не существует!!!!!\n";
    }
    return arr[q];
}
 
template <typename T>
cclass<T>::cclass():size(10)
{
    arr=new int[size];
    if(!arr){cout<<"ERROR!!!\n";exit(1);}
}
 
template <typename T>
cclass<T>::~cclass()
{
    delete []arr;
    cout<<"Деструктор\n";
    system("pause");
}
 
template <typename T>
int cclass<T>::get_size() const
{return size;}
void main(void)
{
    setlocale(LC_ALL, "Russian");
    cclass<int> obj;
    for(int ind=0;ind<obj.get_size();ind++)
    {
        cout<<"arr["<<ind<<"]=";
        cin>>obj[ind];
    }
 
    cout<<"\nСумма = "<<summa<int>(obj)<<endl;
 
 
    obj[34]=-90;
 
    cout<<"Содержимое матрицы\n";
    for(int ind=0;ind<obj.get_size();ind++)
    {cout<<obj[ind]<<'\t';}
    cout<<endl;
    system("pause");
}
 
template <typename T>
istream& operator>>(istream& in, cclass<T>& q)
{
    in>>arr[q];
    return in;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 17:05     Дружественнная функция и класс
Посмотрите здесь:

C++ класс -функция с нужным аргументом
класс список, функция добавления элемента в конец C++
C++ Не рабтает функция добавления данных в класс C++
Функция которая принимает любой класс C++
Класс функция(линейная или квадратичная) C++
C++ Первый класс. Функция-член
Функция которая возвращает класс C++
C++ Дружественная функция. Класс Passport

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.05.2012, 17:45     Дружественнная функция и класс #2
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include<iostream>
using namespace std;
#include<stdlib.h>
 
int arr[10];
 
template <typename T>
class cclass;
 
template <typename T>
int summa(const cclass<T> &obj)
{
    int sum=0;
    for(int i=0;i<obj.size;i++)
    {sum=sum+obj.arr[i];}
    return sum;
}
 
template <typename T>
istream& operator<<(istream& in, cclass<T>& q)
{
    in >> arr[q];
    return in;
}
 
template <typename T>
class cclass
{
    T *arr;
    const int size;
public:
    //cclass(int * ...);
    cclass();
    ~cclass(void);
    cclass(const cclass&);
    int get_size()const;
    int& operator[](int q);
    friend int summa<>(const cclass<T> &obj);
    friend istream& operator<< <>(istream& in, cclass<T>& q);
};
 
template <typename T>
cclass<T>::cclass(const cclass<T>& cl1)
{
    strcpy(arr,cl1.arr);
}
 
 
template <typename T>
istream operator>>(istream in, int q);
 
template <typename T>
int& cclass<T>::operator[](int q)
{
    if(q>=size)
    {
        cout<<"Выход за размер массива!!!!!\n";
        cout<<"Элемента с индексом "<<q<<" не существует!!!!!\n";
    }
    return arr[q];
}
 
template <typename T>
cclass<T>::cclass():size(10)
{
    arr=new int[size];
    if(!arr){cout<<"ERROR!!!\n";exit(1);}
}
 
template <typename T>
cclass<T>::~cclass()
{
    delete []arr;
    cout<<"Деструктор\n";
    system("pause");
}
 
template <typename T>
int cclass<T>::get_size() const
{return size;}
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
    cclass<int> obj;
    for(int ind=0;ind<obj.get_size();ind++)
    {
        cout<<"arr["<<ind<<"]=";
        cin>>obj[ind];
    }
 
    cout<<"\nСумма = "<<summa<int>(obj)<<endl;
 
 
    obj[34]=-90;
 
    cout<<"Содержимое матрицы\n";
    for(int ind=0;ind<obj.get_size();ind++)
    {cout<<obj[ind]<<'\t';}
    cout<<endl;
    system("pause");
}
не знаю откуда arr взялся
AfoTax
 Аватар для AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
01.05.2012, 19:06  [ТС]     Дружественнная функция и класс #3
Спасибо за помощь.
Yandex
Объявления
01.05.2012, 19:06     Дружественнная функция и класс
Ответ Создать тему
Опции темы

Текущее время: 01:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru