C++: 静态成员和子继承
来源:互联网 发布:疯狂java讲义最新版 编辑:程序博客网 时间:2024/05/17 08:21
Meyers在条款7中给出了一个用于实现 "class 专属的new-handlers ",用class X实现了一个
用template和inheritance实现了一个,在template版本中,Meyers解释说:
之所以使用inheritance是为了使derived class 也具有这种能力(class 专属的new-handlers)。
而之所以使用template,是因为确保每一份derived class拥有一个不同的currentHandler data
member,(侯捷解释:因为它(变量 currentHandler)是一个static data member,所以才需要
这项特别技术),请教侯捷为什么做出这样的解释?
位置:effective c++ 第二版,p31,右下一段!
==========================
基类的静态成员是唯一的,如果不用模板,所有从NewHandlerSupport继承的类的currentHandler都一样,你在一个派生类里set_new_handler之后,其他派生类的currentHandler就不能用了。
而以派生类类型为参数的模板基类,每个派生类的基类其实都不一样,其静态成员就是每个派生类自已有一个了。
比如说
class B{public static int a;};
int B::a;
class D1 : public B{};
class D2 : public B{};
...
D1 x; D2 y;
x.a = 1;
assert(y.a == 1);
如上,D1和D2的a是相同的。而
template <typename T> class B{public static int a;};
template <typename T> int B <T> ::a;
class D1 : public B <D1> {};
class D2 : public B <D2> {};
...
D1 x; D2 y;
x.a = 1;
y.a = 2;
assert(x.a == 1);
assert(y.a == 2);
D1和D2有不同的a。
用template和inheritance实现了一个,在template版本中,Meyers解释说:
之所以使用inheritance是为了使derived class 也具有这种能力(class 专属的new-handlers)。
而之所以使用template,是因为确保每一份derived class拥有一个不同的currentHandler data
member,(侯捷解释:因为它(变量 currentHandler)是一个static data member,所以才需要
这项特别技术),请教侯捷为什么做出这样的解释?
位置:effective c++ 第二版,p31,右下一段!
==========================
基类的静态成员是唯一的,如果不用模板,所有从NewHandlerSupport继承的类的currentHandler都一样,你在一个派生类里set_new_handler之后,其他派生类的currentHandler就不能用了。
而以派生类类型为参数的模板基类,每个派生类的基类其实都不一样,其静态成员就是每个派生类自已有一个了。
比如说
class B{public static int a;};
int B::a;
class D1 : public B{};
class D2 : public B{};
...
D1 x; D2 y;
x.a = 1;
assert(y.a == 1);
如上,D1和D2的a是相同的。而
template <typename T> class B{public static int a;};
template <typename T> int B <T> ::a;
class D1 : public B <D1> {};
class D2 : public B <D2> {};
...
D1 x; D2 y;
x.a = 1;
y.a = 2;
assert(x.a == 1);
assert(y.a == 2);
D1和D2有不同的a。
- C++: 静态成员和子继承
- C++ 继承和静态成员
- C#—静态成员和实例成员
- C/C++静态成员变量和静态成员函数
- static(c++)静态数据成员和静态成员函数
- C++_静态数据成员和静态成员函数
- c++:静态成员变量和静态成员函数使用问题
- 继承与静态成员
- 静态成员的继承
- 04 java类的继承和静态公有成员
- 继承与静态成员函数
- c++ 继承与静态成员
- 继承与静态数据成员
- C++ 静态成员与继承
- 继承中的静态成员函数
- 静态类和静态类成员(C#)
- C#——面向对象——静态成员和静态类——静态成员
- 第05章 CORE C++_对象的创建和使用_继承_多态_析构_xxx_cast_友元_只读成员_静态成员_多重继承_虚继承_内部类
- kvm虚拟机实例网络无法启动一例
- 一个90后创业者的经验反思
- HTTP/1.1与HTTP/1.0的区别
- SD卡驱动移植+ 内存管理博客网址
- Java内存泄露的理解与解决(转)
- C++: 静态成员和子继承
- sd_ss_event_proc的处理流程
- 用按钮替换file文件上传效果
- Android JNI 使用的数据结构JNINativeMethod详解
- 图片rar 加密文件
- XMLHttpRequest对象
- Jquery Uploadify上传带进度条
- Iterator和ListIterator的不同使用方法
- android中的style部分属性值介绍