Last active
January 3, 2016 23:59
-
-
Save jirihnidek/8538967 to your computer and use it in GitHub Desktop.
List of base classes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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