类模板
先说一个容易犯的错误,如果B继承A。B,A都是带参的构造函数,那么,在定义的时候容易出现:no appropriate default constructor available
看以下代码:
class A { public: A(int k); }; A::A(int k){} class B:public A { public: B(int m,int n=1){} };
由于在构造B时,须先构造A,但由于已经指定了带参的构造函数,编译器不会自动提供默认的无参构造函数了,所以,没办法给A传参,就无法构造A,应该在B的构造函数中给A传参如:
B(int m,int n=1):A(1){}//注意,不能传形参!这里必须是实参。
再看类模板,举经常用到的STL中的数据结构为例:
例如定义一个int类型的容器vector<int> a;
查看vector的定义:
template<class _Ty, class _Ax> class vector : public _Vector_val<_Ty, _Ax> { // varying size array of values
少了一个参数,没看源码,但这里的class _Ax应该是有默认的参数,所以不用传。
to be continue... ...