Функция getMin
должна быть либо функцией-членом класса, либо функцией-другом класса, чтобы иметь доступ к защищенным элементам данных класса.
Вот демонстрационная программа, которая показывает, как Функция может быть определена как функция-член класса. Я также внес некоторые незначительные изменения в определение класса.
#include <iostream>
template <class T>
class Array {
protected:
size_t size;
T* DynamicArray;
public:
Array() : size( 0 ), DynamicArray( nullptr ) {}
Array(size_t s) : size(s) {
DynamicArray = new T[size];
for ( size_t i = 0; i < size; i++) {
std::cout << "Element " << i+1 << ": ";
std::cin >> DynamicArray[i];
}
}
void coutArray() const {
for ( size_t i = 0; i < size; i++) {
std::cout << DynamicArray[i] << " ";
}
}
~Array() {
delete[]DynamicArray;
}
const T * getMin() const
{
T *min = DynamicArray;
for ( size_t i = 1; i < size; i++ )
{
if ( DynamicArray[i] < *min ) min = DynamicArray + i;
}
return min;
}
};
int main()
{
Array<int> a( 5 );
const int *min = a.getMin();
if ( min != nullptr ) std::cout << "The minimum is equal to " << *min << '\n';
return 0;
}
Вывод программы может выглядеть, например, следующим образом
Element 1: 2
Element 2: 3
Element 3: 1
Element 4: 4
Element 5: 5
The minimum is equal to 1
И ниже есть демонстрационная программа, когда функция определяется как не шаблонная функция друга класса.
#include <iostream>
template <class T>
class Array {
protected:
size_t size;
T* DynamicArray;
public:
Array() : size( 0 ), DynamicArray( nullptr ) {}
Array(size_t s) : size(s) {
DynamicArray = new T[size];
for ( size_t i = 0; i < size; i++) {
std::cout << "Element " << i+1 << ": ";
std::cin >> DynamicArray[i];
}
}
void coutArray() const {
for ( size_t i = 0; i < size; i++) {
std::cout << DynamicArray[i] << " ";
}
}
~Array() {
delete[]DynamicArray;
}
friend const T * getMin( const Array &a )
{
T *min = a.DynamicArray;
for ( size_t i = 1; i < a.size; i++ )
{
if ( a.DynamicArray[i] < *min ) min = a.DynamicArray + i;
}
return min;
}
};
int main()
{
Array<int> a( 5 );
const int *min = getMin( a );
if ( min != nullptr ) std::cout << "The minimum is equal to " << *min << '\n';
return 0;
}