本文为senlie原创,转载请保留此地址:http://blog.youkuaiyun.com/zhengsenlie
经验:APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。
对原始资源的访问可能经由显式转换或隐匿转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。
FontHandle getFont();
void releaseFont(FontHandle fh);
class Font{
public:
explicit Font(FontHandle fh):f(fh){}//获得资源
~Font(){releaseFont(f);}//释放资源
private:
FontHandle f;
};
示例1:显式转换,如get
class Font{
public:
//…
FontHandle get() const {return f;}//显示转换函数
//…
}
示例2:隐式转换
class Font{
public:
//…
operator FontHandle() const //隐式转换函数
{ return f; }
//…
}
#include<iostream>
using namespace std;
class A{
public:
A(int vv): v(vv){}
int getValue(){return v;}
private:
int v;
};
class B{
public:
B(const A &aa): a(aa){}
operator A(){return a;}
private:
A a;
};
void display(A a){
cout << a.getValue() << endl;
}
int main()
{
A a(1);
B b(a);
display(b);
system("pause");
}
输出:
1
解析:
display函数对B类型的参数b调用operator A()进行隐式类型转换,然后再通过调用A的copy constructor构造参数a