模板与静态

// 用静态数据成员实现数据共享
#include "stdafx.h"
#include <iostream>

class CountedClass
{
    static int count;

public:
    CountedClass()  { ++count; }
    CountedClass(const CountedClass&)  { ++count; }
    ~CountedClass() { --count; }

    static int getCount()
    {
        return count;
    }
};

int CountedClass::count = 0;

int main()
{
    CountedClass a;
    std::cout<<CountedClass::getCount()<<std::endl;
    CountedClass b;
    std::cout<<CountedClass::getCount()<<std::endl;
    {
        CountedClass c(b);
        std::cout<<CountedClass::getCount()<<std::endl;
        a = c;
        std::cout<<CountedClass::getCount()<<std::endl;
    }

    std::cout<<CountedClass::getCount()<<std::endl;

    system("pause");
    return 0;
}

// 当其计数类为父类时  如此共享数据失败
#include "stdafx.h"
#include <iostream>

class CountedClass
{
    static int count;

public:
    CountedClass()  { ++count; }
    CountedClass(const CountedClass&)  { ++count; }
    ~CountedClass() { --count; }

    static int getCount()
    {
        return count;
    }
};

int CountedClass::count = 0;

class CountedClass1:public CountedClass {};
class CountedClass2:public CountedClass {};

int main()
{
    CountedClass1 a;
    std::cout<<CountedClass::getCount()<<std::endl;  // 1
    CountedClass1 b;
    std::cout<<CountedClass::getCount()<<std::endl;  // 2
    CountedClass2 c;
    std::cout<<CountedClass::getCount()<<std::endl;  // 3 Error

    system("pause");
    return 0;
}

// 使用模板时,可以实现子类每一个类都有一个static int 静态变量
#include "stdafx.h"
#include <iostream>

using namespace std;

template<class T>
class CountedClass
{
    static int count;

public:
    CountedClass()  { ++count; }
    CountedClass(const CountedClass&)  { ++count; }
    ~CountedClass() { --count; }

    static int getCount()
    {
        return count;
    }
};

template<class T>
int CountedClass<T>::count = 0;

class CountedClass1:public CountedClass<CountedClass1> {};
class CountedClass2:public CountedClass<CountedClass2> {};

int main()
{
    CountedClass1 a;
    std::cout<<CountedClass<CountedClass1>::getCount()<<std::endl;  // 1

    CountedClass2 b;
    std::cout<<CountedClass<CountedClass2>::getCount()<<std::endl;  // 1

    system("pause");
    return 0;
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值