自定义类型转换

自定义类之间的类型转换是通过构建构造函数的多态来进行的

 在对象刚刚定义时, 即使你使用的是赋值操作符=, 也是会调用构造函数, 而不是重载的operator=运算符.

1.用类型转换构造函数进行类型转换实现其它类型本类类型的转化。
转换构造函数格式
class 目标类
{
  目标类(const 源类 & 源类对象引用)
  {
    根据需求完成从源类型到目标类型的转换
  }
}
特点:
转换构造函数,本质是一个构造函数。是只有一个参数的构造函数。如有多个参数,只能称为构造函数,而不是转换函数。

同时为了能够调用源类中的对象,需要设置这一构造函数为源类的友元

自定义类型转换

 

explicit是防止隐式类型转换的关键字 

 
  1. 指定构造函数或转换函数 (C++11起)为显式, 即它不能用于隐式转换复制初始化.
  2. explicit 指定符可以与常量表达式一同使用. 函数若且唯若该常量表达式求值为 true 才为显式. (C++20起)

因为构造函数被explicit修饰后, 就不能再被隐式调用了。也就是displayPoint(1)这种操作不能直接进行,需要Point3D p3a = static_cast<Point3D> (p2); 或者displayPoint(Point(1))这样的强制类型转换

2.用类型转换操作符函数进行转换
类型转化函数格式
class 源类{
  operator 转化目标类(void)
  {
    根据需求完成从源类型到目标类型的转换
  }
}

自定义类型转换

 

这样可以不用使用友元

 小结
1,只有一个参数的类构造函数,可将参数类型转化为类类型。例如,将int 类型的变量赋给obj类型的对象。在构造函数中声明为explicit可以防止隐式转换,只允许显式转换
2,称为转换函数的特殊类成员运算符函数,用于将类对象转换为其他类型。转换函数为类成员函数。没有返回,没有参数。形如: operatortypename(); typename是对象将被换成的类型。将类对象赋给typname变量时或将其强制转换为typename类型是,自动被调用。
3,应用于构造及初始化,赋值,传参,返回等场合。

 

注意:

隐式转换的规则就是根据数据类型从小到大的转换:byte→short→int→long(整数类型)

从子类到父类是显示的类型转换,因为数据类型从大到小的转换

原文链接: https://www.cnblogs.com/uestc-du/p/17065289.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    自定义类型转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/313672

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午1:00
下一篇 2023年2月16日 下午1:00

相关推荐