Connecting Tech Pros Worldwide Forums | Help | Site Map

trying to understand Inheritance, Polymorphism and templates

sapropel
Guest
 
Posts: n/a
#1: Jul 22 '05
ive been trying to understand Inheritance, Polymorphism and templates,
and so ive tried to make a test using all of those. it is about a base
class taht receives two params on the template and two derivies
class's that print those into console or into a file.

template <class T, class S> class Base{

protected:

T t;
S s;

public:

virtual void Print() = 0;
};
//prints to console
template <class T, class S> class Console : public Base{

public:

explicit Console( const T &t, const S &s ){

this->t = t;
this->s = s;
}
void Print(){

std::cout << this->t << " " << this->s << std::endl;
}
};
//prints to file
template <class T, class S> class File : public Base{

public:

explicit File( const T &t, const S &s ){

this->t = t;
this->s = s;
}

void Print(){

std::ofstream file( "teste.txt", std::ios::out );
file << this->t << " " << this->s << std::endl;
}
};

int main(){

Base <int, int> *b = new Console <int, int>( 2, 4 );
b->Print();
delete b;
return 0;
}

that doesnt work, case he says that he cannot convert Console<T,S>* to
Base<T,S>* so i must be doing something wrong.

another thing, is there a way to do this but only declaring the
template in the vase class? instead of declaring in all of them?

thanks.

Victor Bazarov
Guest
 
Posts: n/a
#2: Jul 22 '05

re: trying to understand Inheritance, Polymorphism and templates


sapropel wrote:[color=blue]
> ive been trying to understand Inheritance, Polymorphism and templates,
> and so ive tried to make a test using all of those. it is about a base
> class taht receives two params on the template and two derivies
> class's that print those into console or into a file.
>
> template <class T, class S> class Base{
>
> protected:
>
> T t;
> S s;
>
> public:
>
> virtual void Print() = 0;
> };
> //prints to console
> template <class T, class S> class Console : public Base{[/color]

template<class T, class S> class Console : public Base<T,S> {
[color=blue]
>
> public:
>
> explicit Console( const T &t, const S &s ){
>
> this->t = t;
> this->s = s;
> }
> void Print(){
>
> std::cout << this->t << " " << this->s << std::endl;
> }
> };
> //prints to file
> template <class T, class S> class File : public Base{
>
> public:
>
> explicit File( const T &t, const S &s ){
>
> this->t = t;
> this->s = s;
> }
>
> void Print(){
>
> std::ofstream file( "teste.txt", std::ios::out );
> file << this->t << " " << this->s << std::endl;
> }
> };
>
> int main(){
>
> Base <int, int> *b = new Console <int, int>( 2, 4 );
> b->Print();
> delete b;
> return 0;
> }
>
> that doesnt work, case he says that he cannot convert Console<T,S>* to
> Base<T,S>* so i must be doing something wrong.[/color]

Perhaps it has something to do with the way you inherited Console...
[color=blue]
>
> another thing, is there a way to do this but only declaring the
> template in the vase class? instead of declaring in all of them?[/color]

Not sure what you mean.

Victor
--
Please remove capital As from my address when replying by mail
Closed Thread