#include <iostream>
using namespace std;

// Class template for a generic array
template <class T>
class GenericArray {
private:
    T arr[100]; // Fixed-size array
    int size;   // Size of the array

public:
    // Constructor
    GenericArray(T elements[], int n) {
        size = n;
        for (int i = 0; i < size; i++) {
            arr[i] = elements[i];
        }
    }

    // Function to calculate the summation of all elements
    T findSum() {
        T sum = 0;
        for (int i = 0; i < size; i++) {
            sum += arr[i];
        }
        return sum;
    }

    // Display elements of the array
    void display() {
        cout << "[ ";
        for (int i = 0; i < size; i++) {
            cout << arr[i] << " ";
        }
        cout << "]" << endl;
    }
};

int main() {
    // Test with integers
    int intArr[] = {1, 2, 3, 4, 5};
    GenericArray<int> intArray(intArr, 5);
    cout << "Integer Array: ";
    intArray.display();
    cout << "Sum: " << intArray.findSum() << endl;

    // Test with doubles
    double doubleArr[] = {1.1, 2.2, 3.3, 4.4, 5.5};
    GenericArray<double> doubleArray(doubleArr, 5);
    cout << "\nDouble Array: ";
    doubleArray.display();
    cout << "Sum: " << doubleArray.findSum() << endl;

    // Test with characters
    char charArr[] = {'a', 'b', 'c', 'd', 'e'};
    GenericArray<char> charArray(charArr, 5);
    cout << "\nCharacter Array: ";
    charArray.display();
    cout << "Sum: " << static_cast<int>(charArray.findSum()) << " (ASCII Sum)" << endl;

    return 0;
}
