C++ Smart Pointers 和“与继承有关的”类型转换
2011-06-07 22:23
405 查看
我们真正想要知道的是如何能够使“smart pointer classes的行为”在“与继承相关的类型转换”上,能够和dumb pointers一样。答案很简单:不能够。Daniel Edelson 指出:smart pointers虽然smart,却不是pointers。是的,我们所能做的最好情况就是使用member templates来产生转换函数,然后再在其中出现模棱两可的时候使用转型动作。这并不完美,但是够好。Smart pointers提供了精巧的功能,而“必须使用转型动作以避免模棱两可”则是我们有时候必须付出的一个小代价。
下面看一下代码,便一目了然:
下面看一下代码,便一目了然:
#include <iostream> using namespace std; //Smart Pointer class template <class T> class SmartPtr { public: SmartPtr(T* realptr = 0); T* operator -> () const; T& operator * () const; //转换函数,如果去掉,fun()函数由于参数类型不匹配,编译不过! template<class newType> operator SmartPtr<newType>(); private: T* pointer; }; template<class T> SmartPtr<T>::SmartPtr(T* realptr = 0):pointer(realptr) { } template<class T> inline T& SmartPtr<T>::operator *() const { return *pointer; } template<class T> inline T* SmartPtr<T>::operator ->() const { return pointer; } template<class T> template<class newType> SmartPtr<T>::operator SmartPtr<newType>() { return SmartPtr<newType>(pointer); } class A { public: A(string s):str(s) {} private: string str; }; class B:public A { public: B(string s):A(s) {} }; void fun(const SmartPtr<A>& pmp,int num) { //cout<<*pmp<<num<<endl; } int main() { SmartPtr<A> obj1(new A("class A")); SmartPtr<B> obj2(new B("class B")); fun(obj2,10); system("pause"); return 0; }
相关文章推荐
- 有关C++继承与友元、继承与类型转换详解
- 当C++多继承遇上类型转换
- C++多重继承下的指针类型转换
- C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid
- C++中多继承和类型转换
- C++多重继承下的指针类型转换
- C++中四个和类型转换有关的关键字
- C++中多继承和类型转换
- c++多态 类型转换 多重继承
- C++多重继承下的指针类型转换
- C++多重继承下的指针类型转换
- 20140729 while((*pa++=*pb++)!='\0') 合并数组代码 C++类型转换关键字 封装 多态 继承
- C++、C中有关double、float类型转换成int型,及取整,丢失精度问题。
- C++多重继承及类型转换
- C++多重继承下的指针类型转换
- C++多重继承下的指针类型转换
- C++的继承关于向上类型转换
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- C++多重继承下的指针类型转换
- C++继承与友元、继承与类型转换