一个用模板实现的计数基类
2007-06-05 19:51
302 查看
#include <stddef.h>
#include <iostream>
template <typename CountedType>
class ObjectCounter {
private:
static size_t count; // number of existing objects
protected:
// default constructor
ObjectCounter() {
++ObjectCounter<CountedType>::count;
}
// copy constructor
ObjectCounter (ObjectCounter<CountedType> const&) {
++ObjectCounter<CountedType>::count;
}
// destructor
~ObjectCounter() {
--ObjectCounter<CountedType>::count;
}
public:
// return number of existing objects:
static size_t live() {
return ObjectCounter<CountedType>::count;
}
};
template <typename CountedType>
size_t ObjectCounter<CountedType>::count = 0;
template <typename CharT>
class MyString : public ObjectCounter<CharT> {
};
template < typename CharT>
class MyString2 : public ObjectCounter<CharT >{
};
void main()
{
MyString<char> s1, s2;
MyString2<char> s3;
MyString<wchar_t> ws;
std::cout << "number of MyString<char>: "
<< MyString<char>::live() << std::endl;
std::cout << "number of MyString2<char>: "
<< MyString2<char>::live() << std::endl;
std::cout << "number of MyString<wchar_t>: "
<< ws.live() << std::endl;
}
Output: 3 3 1
==========
template <typename CharT>
class MyString : public ObjectCounter<MyString<CharT> > {
};
template < typename CharT>
class MyString2 : public ObjectCounter<MyString2<CharT> >{
};
void main()
{
MyString<char> s1, s2;
MyString2<char> s3;
MyString<wchar_t> ws;
std::cout << "number of MyString<char>: "
<< MyString<char>::live() << std::endl;
std::cout << "number of MyString2<char>: "
<< MyString2<char>::live() << std::endl;
std::cout << "number of MyString<wchar_t>: "
<< ws.live() << std::endl;
}
Output : 2 1 1
#include <iostream>
template <typename CountedType>
class ObjectCounter {
private:
static size_t count; // number of existing objects
protected:
// default constructor
ObjectCounter() {
++ObjectCounter<CountedType>::count;
}
// copy constructor
ObjectCounter (ObjectCounter<CountedType> const&) {
++ObjectCounter<CountedType>::count;
}
// destructor
~ObjectCounter() {
--ObjectCounter<CountedType>::count;
}
public:
// return number of existing objects:
static size_t live() {
return ObjectCounter<CountedType>::count;
}
};
template <typename CountedType>
size_t ObjectCounter<CountedType>::count = 0;
template <typename CharT>
class MyString : public ObjectCounter<CharT> {
};
template < typename CharT>
class MyString2 : public ObjectCounter<CharT >{
};
void main()
{
MyString<char> s1, s2;
MyString2<char> s3;
MyString<wchar_t> ws;
std::cout << "number of MyString<char>: "
<< MyString<char>::live() << std::endl;
std::cout << "number of MyString2<char>: "
<< MyString2<char>::live() << std::endl;
std::cout << "number of MyString<wchar_t>: "
<< ws.live() << std::endl;
}
Output: 3 3 1
==========
template <typename CharT>
class MyString : public ObjectCounter<MyString<CharT> > {
};
template < typename CharT>
class MyString2 : public ObjectCounter<MyString2<CharT> >{
};
void main()
{
MyString<char> s1, s2;
MyString2<char> s3;
MyString<wchar_t> ws;
std::cout << "number of MyString<char>: "
<< MyString<char>::live() << std::endl;
std::cout << "number of MyString2<char>: "
<< MyString2<char>::live() << std::endl;
std::cout << "number of MyString<wchar_t>: "
<< ws.live() << std::endl;
}
Output : 2 1 1
相关文章推荐
- 实现将student中的所有信息在一个模板页上显示,格式参考课件中的图片。并实现编辑功能
- 写一个【栈】模板,并实现“任意进制转换器”
- 一个具有对象计数功能的基类
- 中级JavaScript例子, 如何实现一个简单实用的模板套用机制, GXTemplate , 第2章(估计要写9章)
- 一个可以放入STL容器的简洁、高效、非计数的智能指针实现
- Java实现的一个简单的模板渲染
- 如何实现 画一个屏幕的渐变效果,并将其作为程序的背景模板
- C++ 使用模板实现一个List的实例
- 7.30定义一个公共基类Shape,实现运行时的多态性
- 一个我认为比较好的Spfa模板(使用邻接表和队列实现)
- c++引用计数外置方式模板实现
- Juicer – 一个Javascript模板引擎的实现和优化
- 模板实现一个通用栈
- 【python】简单实现一个模板引擎
- 用模板和基类巧妙实现类方法的回调(消息映射的基本原理)
- 将任意类型映射到一个唯一整数(C++模板实现TypeList)
- 【25】实现一个含有min函数的栈的通用模板
- singleton pattern的一个模板实现, 适用于单线程
- 一个实体类基类实现
- 自己实现一个带引用计数的智能指针,根据源码