Создаю шаблон класса для массива
файл myArray.h
#ifndef myArray_h
#define myArray_h
#include <iostream>
using std::istream;
using std::ostream;
template <typename T> class myArray //создание шаблона класса myArray
{
T** mas; //указатель на двумерный массив
int line, //кол-во строк
column; //кол-во столбцов
friend istream& operator >> (istream& in, const myArray& el)
//перегрузка оператора вывода >>
{
for (int i = 0; i < el.line; i++)
{
for (int j = 0; j < el.column; j++)
{
in >> el.mas[i][j];
}
}
return in;
}
public:
myArray()
{
mas = 0; //конструктор без параметров
line = 0;
column = 0;
}
myArray(int n, int m); //прототип конструктора с параметрами
myArray(const myArray& masToCopy); //прототип конструктор копирования
~myArray() //деструктор
{
for (int i = 0; i < line; i++)
{
delete[](mas[i]);
}
delete[](mas);
}
friend myArray <T> operator +(const myArray<T>&, const myArray<T>&);
//прототип перегрузки оператора сложения +
};
template <typename T> myArray <T>::myArray(int n = 1, int m = 1)
: line(n), column(m) //конструктор с параметрами
{
mas = new int* [n];
for (int i = 0; i < n; i++)
{
mas[i] = new int[m];
}
}
template <typename T> myArray <T>:: myArray(const myArray& masToCopy)
// конструктор копирования
{
line = masToCopy.line;
column = masToCopy.column;
mas = new int* [line]; // для новой копии
for (int i = 0; i < line; i++)
mas[i] = new int[column];
for (int i = 0; i < line; i++)
for (int j = 0; j < column; j++)
mas[i][j] = masToCopy.mas[i][j];
}
template <typename T> myArray <T> operator+(const myArray<T>& m1,
const myArray<T>& m2)
//перегрузка оператора сложения +
{
for (int i = 0; i < m1.line; i++)
{
for (int j = 0; j < m1.column; j++)
{
m1.mas[i][j] = m1.mas[i][j] + m2.mas[i][j];
}
}
return m1;
}
файл main.cpp
#include "stdafx.h"
#include <iostream>
#include "myArray.h"
using std::cout;
using std::endl;
int main()
{
myArray<int> intArray1(2, 2);
myArray<int> intArray2(2, 2);
myArray<int> A = intArray1 + intArray2;
cout << A;
return 0;
}
Как можно исправить?

template<typename U> friend myArray <U> operator +(const myArray<U>&, const myArray<U>&);– Harry Mar 19 '17 at 06:12+являются друзьями всехmyArray. Т.е. оператор сложения дляmyArray<double>будет другом для классаmyArray<SomeClass>и т.д. и и т.п в любых комбинациях. – AnT stands with Russia Mar 19 '17 at 06:22myArray<int>является другом только дляmyArray<int>(я уверен, что в этом и заключалось намерение автора). Но для этого надо предпринять ряд дополнительных телодвижений. Хочет ли автор тратить эти дополнительные усилия или не хочет - это уже вопрос отдельный. – AnT stands with Russia Mar 19 '17 at 06:22+будет другом для всехmyArray. Никак не могу сообразить, как это может оказаться опасным, не подскажете? Только без вариантов в реализации преднамеренно использовать разные типы массивов, напримерmyArray<int>иmyArray<double>. – Harry Mar 19 '17 at 06:32myArray<int>был именно и толькоoperator +<int>. Это вполне естественное желание. Именно это нам нужно. Мой ответ показывает, как это правильно сделать. – AnT stands with Russia Mar 19 '17 at 06:59