类模板

先说一个容易犯的错误,如果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... ...

 

 

 

 

 

posted @ 2013-01-21 19:59  yurius  阅读(138)  评论(0编辑  收藏  举报