模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?
模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?
[解决办法]
可以,没有什么不同,模板类里使用虚函数的一个程序
template < typename T >
class A
{
public:
virtual void B() = 0;
};
template < typename T >
class C : public A < T >
{
public:
void B()
{
}
};
template < typename T >
class D : public A < T >
{
public:
void B()
{
}
};
[解决办法]
完全相同
[解决办法]
可以,没有什么不同
[解决办法]
一样,不需要特殊化 ~
[解决办法]
完全一样,
在非模板类里怎么用虚函数,
就在模板类里怎么用
template class <T>
class A
{
public:
virtual void f1(){cout < < "A is called " < <endl;} //虚函数
virtual void f2()=0{cout < < "A=0 " < <endl;} //纯虚函数
};
template class <T>
class B: public A <T>
{
public:
void f1(){cout < < "B is called " < <endl;}
void f2(){cout < < "B!=0 " < <endl;}
};
void main()
{
A <int> * p=new B <int> ;
p-> f1(); //输出B is called,虚函数成功
}
[解决办法]
改一下.在下面
template <class T>
class A
{
public:
virtual void f1(){cout < < "A is called " < <endl;} //虚函数
virtual void f2()=0{cout < < "A=0 " < <endl;} //纯虚函数
};
template <class T>
class B: public A <T>
{
public:
void f1(){cout < < "B is called " < <endl;}
void f2(){cout < < "B!=0 " < <endl;}
};
void main()
{
A <int> * p=new B <int> ;
p-> f1(); //输出B is called,虚函数成功
p-> f2(); //输出B!=0,纯虚函数成功
}
[解决办法]
完全一样。
[解决办法]
学习了~!
[解决办法]
可以
[解决办法]
唯一需要注意的是:
A <int> 和A <char> 是两个完全不同的类。
如果要继承A的话需要这样:
class S1: public A <int>
或者
template <typename T>
class S2: public A <T>
对于S2来说,一下代码是非法的。
A <int> *p = new S2 <char> ();
因为A <int> 不是S2 <char> 的基类,A <char> 才是。
[解决办法]
楼上的真聪明
[解决办法]
看来模板是不影响类的多态的,这是两个C++的特性,互相不影响,不然就不好了。