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

Перенести методы дружественного класса в подключаемый файл

09.06.2016, 22:12. Показов 625. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрые люди, в отчаянии прошу помощи. Голова уже пухнет, не могу понять что куда откуда и как. Необходимо перенести описание всех методов дружественного класса в подключаемый файл. Задача поставлена в целях обучения. Не первый день сижу, не могу разобраться. Буду премного благодарен даже за пинок в нужную сторону, не говоря уже о коде:

Класс
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
#ifndef CLASS_H
#define CLASS_H
     // Tmp(const Tmp &);
 
template <class T>
class TMatr
{
      float **A;
      int n, m; 
      
      
      friend class Tmp;
      
      
      class Tmp
      {
        TMatr &sup;
        int i;
        Tmp(TMatr &sup_, int i_):sup(sup_), i(i_) {};
 
        friend class TMatr;
        
        public:
        
        float &operator[](int j) 
        {
              if (j>sup.m||j<0)                   //проверка на выход за пределы размернсти массива
              {    
                    exit(1);
              }
              else
              {
            return sup.A[i][j];
            }
        }
       };
 
      public:
             TMatr(int, int);
             TMatr(const TMatr &);
             ~TMatr();
             void Set_N(int);
             void Set_M(int);
             int Get_N();
             int Get_M();
             void Vvodmat ();
             void Vivmat(int, int);
             void Change(int, int);
                  
          
             Tmp operator[](int i)                //проверка на выход за пределы размернсти массива
              {
                     if (i>n||i<0)                    
              {
                      exit(1);
              } 
                 return Tmp(*this, i);
              
              }
};
 
#endif
Файл с методами, куда нужно перенести методы класса Tmp и перегрузку Tmp operator[](), учитывая шаблоны

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <cstdlib>
#include <iostream>
#include <ctime>
#include "class.h"
using namespace std;
 
 
                                 //Конструктор преобразования/умолчания
template <class T>
TMatr<T>::TMatr(int Str=1, int Stolb=1)
{
    n=Str;
    m=Stolb;
    A=new T*[n];
    for (int i=0;i<n;i++)
    {
          A[i]=new T [m];
    }
}                            
 
                         
                                 //Конструктор копирования
template <class T>
TMatr<T>::TMatr(const TMatr<T> &niu)
{ 
    n=niu.n;
    m=niu.m;
    A=new T*[n];
    for (int i=0;i<n;i++)
    { 
          A[i]=new T [m];
    }     
         
                   
}
template <class T>
void TMatr<T>::Set_N(int N)     //сеттер числа строк
{
     n=N;
}
template <class T>
void TMatr<T>::Set_M(int M)     //сеттер числа столбцов
{
     m=M;
}
 
 
template <class T>
int TMatr<T>::Get_N()     //геттер числа строк
{
     return n;
}
template <class T>
int TMatr<T>::Get_M()     //геттер числа столбцов
{
     return m;
}
 
                                      //Блок ввода
template <class T>                            
void TMatr<T>::Vvodmat()
{
cout<<"\n\nVvedite elemennti massiva:\n\n";
for (int Q=0;Q<n;Q++)
      {
          for (int W=0; W<m; W++)
          {
              cout<<"Element ["<<Q<<"]"<<"["<<W<<"] = ";
              cin>>A[Q][W];
          }
      }
}
                                        
                                   // Блок вывода
 
template <class T>
void TMatr<T>::Vivmat(int Q, int W)
{
     cout<<"\n";
     for (int i=0; i<Q; i++)
     {
         for (int j=0; j<W; j++)
         {
             cout.width(3);
             cout<<A[i][j];
         }
         cout<<"\n";
     }
cout<<"\n";
     
}
 
                                   // Блок деструктора
template <class T>                              
TMatr<T>::~TMatr()
{
              for(int i=0; i<n; i++)
              {
                      delete []A[i];
              }
              delete []A;
} 
         
         
                                    //Блок изменения числа строк и столбцов
template <class T>
void TMatr<T>::Change(int Str, int Stolb)
{
    for(int i=0; i<n; i++)
              {
                      delete []A[i];
              }
              delete []A;
    n=Str;
    m=Stolb;         
    A=new T*[n];
    for (int i=0;i<n;i++)
    {
          A[i]=new T [m];
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2016, 22:12
Ответы с готовыми решениями:

Вызов функций класса Dictionary функциями дружественного класса
Функции класса Tree используют функции дружественного класса Dictionary,но вылетают ошибки,не...

Объявление дружественного класса внутри класса
class A{ friend class B{ B(A &amp;a); } } Подскажите пожалуйста, такое...

Поля дружественного класса
есть примерно такой код class ClientAuthorization { public: int count; //считается в...

Метод дружественного класса
Нужно сделать такую ​​задачу, но дойшовшы к этому: выбрать заданное число N абитуриентов, имеющих...

1
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
10.06.2016, 17:34 2
Так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
TMatr<T>::Tmp::Tmp(TMatr &sup_, int i_)
    : sup(sup_), i(i_)
{
}
 
template <class T>
float &TMatr<T>::Tmp::operator[](int j)
{
    if (j>sup.m || j<0)                   //проверка на выход за пределы размернсти массива
    {
        exit(1);
    }
    else
    {
        return sup.A[i][j];
    }
}
0
10.06.2016, 17:34
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2016, 17:34
Помогаю со студенческими работами здесь

Использование дружественного класса
Нужно что бы классы стали общее дружеские вложенные классы поидее в книге написано можно добавить...

Вызов функций дружественного класса
У меня есть 2 класса Tree и Dictionary,которые являются друзьями class Tree; class Dictionary...

Объявление дружественного класса в приватной области
class A { public: A(){} private: void Alg(){} friend class B; };

Доступ дружественного оператора к приватным данным класса
Здравствуйте. тока начал изучение С++; составляю прогу практически по учебнику - реализация класса...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru