首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?该怎么处理

2012-02-29 
模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?模板类里可以使用虚函数(包括

模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?
模板类里可以使用虚函数(包括纯虚函数)吗?与非模板类里使用虚函数有什么不同?

[解决办法]
可以,没有什么不同,模板类里使用虚函数的一个程序
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++的特性,互相不影响,不然就不好了。

热点排行