Skip to content

Instantly share code, notes, and snippets.

@jirihnidek
Last active January 3, 2016 23:59
Show Gist options
  • Save jirihnidek/8538967 to your computer and use it in GitHub Desktop.
Save jirihnidek/8538967 to your computer and use it in GitHub Desktop.
List of base classes.
#include <iostream>
#include <vector>
#include <stdlib.h>
// Not templated abstract class
class DataBase {
public:
DataBase() {};
~DataBase() {};
virtual void print(std::ostream &out_stream, int idx) = 0;
virtual int count(void) = 0;
};
// Templated subclass of DataBase
template<class T>
class Data : public DataBase {
public:
Data(T *data, int count) { this->_data = data; this->_count = count; };
~Data() {};
T value(int idx) { return this->_data[idx]; };
int count(void) { return this->_count; };
void print(std::ostream &out_stream, int idx) { out_stream << this->_data[idx] << " "; };
private:
T *_data;
int _count;
};
// Not templated container
class Container {
public:
Container() {};
~Container() {this->values.clear(); };
std::vector<DataBase*> values;
void print_values(void);
};
void Container::print_values(void)
{
DataBase *data;
for(std::vector<DataBase*>::iterator iter=this->values.begin();
iter != this->values.end();
++iter)
{
data = *iter;
for(int i=0; i<data->count(); i++) {
data->print(std::cout, i);
}
std::cout << std::endl;
}
}
int main(void)
{
Container *cont = new Container();
int i_array[5] = {1, 2, 3, 4, 5};
double d_array[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
Data<int> *i_data = new Data<int>(i_array, 5);
Data<double> *d_data = new Data<double>(d_array, 5);
cont->values.push_back((DataBase*)i_data);
cont->values.push_back((DataBase*)d_data);
cont->print_values();
delete cont;
delete i_data;
delete d_data;
return EXIT_SUCCESS;
}
#include <iostream>
#include <vector>
#include <stdlib.h>
// Not templated class
class DataBase {
public:
DataBase() {};
~DataBase() {};
virtual void print(void) { std:: cout << "None" << std::endl; };
private:
int _count;
};
// Templated subclass of DataBase
template<class T>
class Data : public DataBase {
public:
Data(T value) { this->_value = value; };
~Data() {};
T _value;
T value() { return this->_value; };
void print(void) { std::cout << this->_value << std::endl; };
};
// Not templated container
class Container {
public:
Container() {};
~Container() {this->values.clear(); };
std::vector<DataBase*> values;
void print_values(void);
};
// Print all values in all items
void Container::print_values(void)
{
DataBase *data;
for(std::vector<DataBase*>::iterator iter=this->values.begin();
iter != this->values.end();
++iter)
{
data = *iter;
data->print();
}
}
// Execute experiment
int main(void)
{
Container *cont = new Container();
Data<int> *int_data = new Data<int>(10);
Data<float> *float_data = new Data<float>(3.14);
Data<bool> *bool_data = new Data<bool>(true);
Data<double> *double_data = new Data<double>(3.1415);
//int_data->print();
cont->values.push_back((DataBase*)int_data);
cont->values.push_back((DataBase*)float_data);
cont->values.push_back((DataBase*)bool_data);
cont->values.push_back((DataBase*)double_data);
cont->print_values();
delete cont;
delete int_data;
delete float_data;
delete bool_data;
delete double_data;
return EXIT_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment