当前位置 博文首页 > 一位初中编程爱好者的博客:C++模板递归

    一位初中编程爱好者的博客:C++模板递归

    作者:[db:作者] 时间:2021-08-29 22:25

    #include <iostream>
    using namespace std;
    template<int n>
    class C//主模板类
    {
    private:
    	C<n - 1> m_c;//由于调用的是C<n-1>而不是C<n>,所以不算自引用,编译能通过
    public:
    	C()
    	{
    		cout << n << endl;
    	}
    	~C()
    	{
    		cout << n << endl;
    	}
    };
    template<>
    class C<0>//模板特化,相当于递归终止条件
    {
    public:
    	C()
    	{
    		cout << 0 << endl;
    	}~C()
    	{
    		cout << 0 << endl;
    	}
    };
    int main()
    {
    	delete new C<10>;
    	return 0;
    }
    

    运行结果:
    运行结果
    分析:创建对象C<10>时会先构造C<9>,创建C<9>又会先构造C<8>,以此类推,先构造成员,再调用自身的构造函数,所以构造的顺序是从0到10,析构则正好相反,先调用自身的析构函数,再调用成员的析构函数。

    cs