Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,855 questions

51,776 answers

573 users

How to write generic array with template class in C++

2 Answers

0 votes
#include <iostream>

using std::cout;
using std::endl;

#define SIZE 5

template <class T> class Test {
	T arr[SIZE];
public:
	Test() {
		cout << "constructor" << endl;
	}
	T &operator[](int i);
	void print(void);
};

template <class T> T &Test<T>::operator[](int i)
{
	if (i < 0 || i > SIZE - 1) {
		cout << "index: " << i << " is out of range" << endl;
		return arr[SIZE - 1];
	}
	return arr[i];
}

template <class T>
void Test<T>::print(void)
{
	for (int i = 0; i < SIZE; i++)
		cout << arr[i] << ' ';
	cout << endl;
}

int main()
{
	Test<int> iobj1;
	for (int i = 0; i < SIZE; i++)
		iobj1[i] = i + 3;
	iobj1.print();
	iobj1[17] = 99;

	Test<double> dobj;
	for (int i = 0; i < SIZE; i++)
		dobj[i] = (double)(i + 7) / 4;
	dobj.print();

	return 0;
}


/*
run:

constructor
3 4 5 6 7
index: 17 is out of range
constructor
1.75 2 2.25 2.5 2.75

*/

 



answered Mar 16, 2018 by avibootz
edited Mar 16, 2018 by avibootz
0 votes
#include <iostream>

using std::cout;
using std::endl;

#define SIZE_INT 5
#define SIZE_DOUBLE 4
#define DEFAULT_SIZE 6

template <class T, int size = DEFAULT_SIZE> class Test {
	T arr[size];
public:
	Test() {
		cout << "constructor" << endl;
	}
	T &operator[](int i);
	void print(void);
};

template <class T, int size> T &Test<T, size>::operator[](int i)
{
	if (i < 0 || i > size - 1) {
		cout << "index: " << i << " is out of range" << endl;
		return arr[size - 1];
	}
	return arr[i];
}

template <class T, int size>
void Test<T, size>::print(void)
{
	for (int i = 0; i < size; i++)
		cout << arr[i] << ' ';
	cout << endl;
}

int main()
{
	Test<int, SIZE_INT> iobj1;
	for (int i = 0; i < SIZE_INT; i++)
		iobj1[i] = i + 3;
	iobj1.print();
	iobj1[17] = 99;

	Test<double, SIZE_DOUBLE> dobj;
	for (int i = 0; i < SIZE_DOUBLE; i++)
		dobj[i] = (double)(i + 7) / 4;
	dobj.print();

	return 0;
}


/*
run:

constructor
3 4 5 6 7
index: 17 is out of range
constructor
1.75 2 2.25 2.5

*/

 



answered Mar 16, 2018 by avibootz

Related questions

1 answer 193 views
1 answer 188 views
1 answer 197 views
1 answer 160 views
1 answer 222 views
1 answer 203 views
...