转换构造函数

浅谈

在C++的类中有几种构造函数,默认的不带参数的构造函数,具有默认值的构造函数都被称为默认构造函数,一般的构造函数,又可以说成包含了转换构造函数、复制构造函数、普通构造函数。
转换构造函数是这样的构造函数:它可以在执行默写和类的对象相关的操作时,由系统调用把非自定义数据结构转成一个自定义的数据结构,进而与自定义数据结构进行运算。

小例

1
class T
{
public:
    T();
    T(int b){this->a = b; cout<<"constructor"<<endl;} //
    void display(T s);
private:
    int a;
};
inline void T::display(T s)
{
    cout<<s.a<<endl;
}

如果存在这样的操作:

T t(20);
t.display(30);

我们得到的结果是:

constructor
constructor
30
请按任意键继续. .

由此可见,原来的display函数需要的是class T 类型的参数,而传入的int型的30时,会调用转换构造函数,从而把30转换成一个临时的class T的对象,进行后续运算。第一次调用构造函数初始化对象t,那么第二次调用构造函数就是进行的隐式转换。这类构造函数的参数只有一个,并且是内置的基本数据类型。

explicit关键字

explicit的作用是阻止进行隐式的类型转换,如果在上面例子中在构造函数的前面加上“explicit”,再执行程序会得到报错,不能转换为T类型。
类型转换函数

相对的,有时候需要把一个类对象转换成一个普通的内置的数据类型,那么就要用到类型转换函数了,它只能作为类的成员函数,而且没有函数类型,返回值就是对应的函数名的表示的类型。

operator int()
{
    return a;//因为是成员函数,所以返回的是当前对象中的a数据成员的值
}
T t(50);
int b = t + 20;

参考

http://www.2cto.com/kf/201311/258753.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值