笔记-2017.9.12

来源:互联网 发布:列车网络控制系统组成 编辑:程序博客网 时间:2024/06/06 00:57

1.类的自动类型转换,强制类型转化,显隐性转换,C++中允许从某类型到某个类类型的转换(就像内置类型一样),具体来说,通过只含一个参数的构造函数,其可以作为转换类型构造函数来实现,例如

class foo:

{

public:

foo(int);

..

..

..

};

其中的构造函数foo就可以用来转换类型:foo foo1=9; 这句话是成立的, 程序将使用9来初始化一个临时的对象,然后再将其中的值赋给foo1,这是隐式的类型转换。

2.显式强制类型转换与内置一样:foo foo1=(int) 9;

3.通过使用explicit来修饰转换类型构造函数可以关闭其隐式类型转换的性质,即foo foo1=9将不再可用。

4.C++也支持从类类型到其他类型的转换,具体为使用转换函数:operator typeName();注意:转换函数必须是类方法、转换函数不能指定返回类型、转换函数不能有参数,举个例子

foo::operator double() const

{

return this->xxx;

}

5.尽管C++支持类的类型转换,但这不意味着任何情况下程序都会进行转换,例如:

double foo1;

foo1.xxx();这是没有意义的,因为只有类对象才能调用成员函数,程序不会将foo1解释为foo类对象的。

6.不要写太多的转换函数,会导致二义性。例如:

double foo1;foo foo2;

total=foo1+foo2;//+已被重载

如果同时提供了转换构造函数(double->foo)和构造函数(foo->double)这会造成歧义:是将foo1转为foo,然后执行重载后的+,还是将foo2转为double,执行一般的double加法?

 

原创粉丝点击