(用户定义的类) 类型型转换 是做什么用的,explicit关键字呢?该怎么解决
(用户定义的类) 类型型转换 是做什么用的,explicit关键字呢?
学到 用户定义的类的类型转换 总觉得哪里不对劲……
------解决方案--------------------
explicit关键字是不允许编译器自动调用默认构造函数,如
class AAA{
public:
explicit AAA(string s){}
};
在有explicit关键字的情形下,不能
AAA a("hello"); // 不能这样隐式调用构造函数
AAA b(string("world!")); // 可以这样,即必须显式构造一个string类型的参数,然后再调用
用户自定义类型转换和语言本身自带的类型转换类似,如:
int a = 123;
double b = 456.789;
double c;
c = a+b; // a 的类型由int提升为double,这就是自动类型转换
在C++中,以最简单的为例,假设有一个类,可以参与与int型的数据计算:
如
class BBB{
public:
BBB(int v):val(v){}
operator BBB() const{return val;} // 自动将BBB类型的数据转换为int型的
private:
int val;
};
这样,当有
BBB bb(2);
int a = 1;
int c;
c = a + bb; //这时bb自动从BBB类型转换为int型
------解决方案--------------------
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
这个里面讲解的很全面,希望有助于你的学习。
学到 用户定义的类的类型转换 总觉得哪里不对劲……
------解决方案--------------------
explicit关键字是不允许编译器自动调用默认构造函数,如
class AAA{
public:
explicit AAA(string s){}
};
在有explicit关键字的情形下,不能
AAA a("hello"); // 不能这样隐式调用构造函数
AAA b(string("world!")); // 可以这样,即必须显式构造一个string类型的参数,然后再调用
用户自定义类型转换和语言本身自带的类型转换类似,如:
int a = 123;
double b = 456.789;
double c;
c = a+b; // a 的类型由int提升为double,这就是自动类型转换
在C++中,以最简单的为例,假设有一个类,可以参与与int型的数据计算:
如
class BBB{
public:
BBB(int v):val(v){}
operator BBB() const{return val;} // 自动将BBB类型的数据转换为int型的
private:
int val;
};
这样,当有
BBB bb(2);
int a = 1;
int c;
c = a + bb; //这时bb自动从BBB类型转换为int型
------解决方案--------------------
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
这个里面讲解的很全面,希望有助于你的学习。