#include <iostream>
/*
This implementation was intended for using copy constructors instead of
the virtual member function of basic_dgematrix class, ie
void initialize( basic_dgematrix & );
BUT the following code does NOT work.
*/
class basic_dgematrix {
public:
int value;
basic_dgematrix( int _value ) {
std::cout << "basic_dgematrix( int );" << std::endl;
value = _value;
}
};
class dgematrix : public basic_dgematrix {
public:
dgematrix( int _value ) : basic_dgematrix( _value ) {
std::cout << "dgematrix( int );" << std::endl;
}
};
class _dgematrix : public basic_dgematrix {
public:
_dgematrix( int _value ) : basic_dgematrix( _value ) {
std::cout << "_dgematrix( int );" << std::endl;
};
_dgematrix( const dgematrix & mat ) : basic_dgematrix( mat.value ) {
std::cout << "_dgematrix( dgematrix );" << std::endl;
};
};
class basic_dssmatrix {
public:
int value;
basic_dssmatrix( int _value ) {
std::cout << "basic_dssmatrix( int );" << std::endl;
value = _value;
}
};
class dssmatrix : public basic_dssmatrix {
public:
dssmatrix( int _value ) : basic_dssmatrix( _value ) {
std::cout << "dssmatrix( int );" << std::endl;
}
};
class _dssmatrix : public basic_dssmatrix {
public:
_dssmatrix( int _value ) : basic_dssmatrix( _value ) {
std::cout << "_dssmatrix( int );" << std::endl;
}
_dssmatrix( const dssmatrix & mat ) : basic_dssmatrix( mat.value ) {
std::cout << "_dssmatrix( dssmatrix );" << std::endl;
}
};
_dgematrix operator + ( const basic_dssmatrix & matA, const basic_dgematrix & matB ) {
dgematrix newmat( matB );
newmat.value += matA.value;
return newmat;
}
int main(int argc, char *argv[]) {
dssmatrix s;
dgematrix g;
_dgematrix _g;
std::cout << "s + g;" << std::endl;
s + g;
std::cout << std::endl;
std::cout << "s + _g;" << std::endl;
s + _g;
return 0;
}