Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
1

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

01.05.2012, 17:05. Просмотров 270. Ответов 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
#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 17:05
Ответы с готовыми решениями:

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Write программу с использованием класса Вектор (не без помощи форумчанина), но...

Можно ли как то запустить функцию или класс которая находится ниже чем исполняемая функция или класс?
Можно ли как то запустить функцию или класс которая находится ниже чем...

Функция которая возвращает класс
Есть функция считывания вектора с формы Вызов функции выглядит так ...

Класс-функция с нужным аргументом
1имеется клаас client 2в нём есть строка char *str 3при инициализации класса...

Первый класс. Функция-член
Добрый день! Пытаюсь собрать свой первый класс, но, кажется, не до конца...

2
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
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 взялся
1
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
01.05.2012, 19:06  [ТС] 3
Спасибо за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 19:06

Дружественный класс или функция
Есть 2 класса. Допустим: класс 1: Товар класс 2:Клиент В товаре есть приват...

Дружественная функция. Класс Passport
Создать класс Passport со следующими полями: -номер паспорта -фамилия...

Класс функция(линейная или квадратичная)
Описать класс Математическая функция.Функция может быть линейной y=ax+b или...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru