前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyC++68,类的类型转换

EasyC++68,类的类型转换

作者头像
TechFlow-承志
发布2022-08-26 17:29:46
2330
发布2022-08-26 17:29:46
举报
文章被收录于专栏:TechFlow

作者 | 梁唐

大家好,我是梁唐。

这是EasyC++系列的第68篇,来聊聊类的转换。

类的转换

在C++当中,我们经常用到类型转换。其中有一些类型是能够自行转换的。

比如:

代码语言:javascript
复制
long count = 8;
double time = 11;
int side = 3.33;

其中8是int类型,被转换成了long类型,11是int类型,被转换成了double类型。这样的转换之所以能够发生,是因为它们之间能够兼容。

有一些转换不太兼容,可能就没办法直接执行,比如:

代码语言:javascript
复制
int *p = 100;

100是一个int型,而等号的左边是一个int *是一个指针类型,两者并不兼容。虽然计算机当中的地址也是用整数来表示的,但从概念上来说,这两者不是一个东西。

这个时候如果我们要强行进行转换,就需要使用强制转换:

代码语言:javascript
复制
int *p = (int *) 10;

虽然编译器并不会报错,但是显然,这样的转换并没有实际意义。在我们自定义的类当中,我们同样可以实现这样的转换。

我们来看这段代码:

代码语言:javascript
复制
class Time {
  private:
     int minutes;
    public:
     Time();
     Time(int m) {
   minutes = m;
  }
};

我们简化了之前例子中的Time类,让它只包含一个int。我们当然可以使用构造函数来创建对象:

代码语言:javascript
复制
Time a = Time(10);
Time b(10);

但这个构造函数还有一个特殊的用法,就是用在类型转换上。由于它只有一个参数int,所以我们可以直接将一个int类型转换成Time类的对象,like this:

代码语言:javascript
复制
Time c = 10;

这里利用了C++隐式转换的方式,除了隐式转换之外,我们也可以显式转换:

代码语言:javascript
复制
Time c = (Time) 19;

有的时候,我们不希望发生这样的隐式转换怎么办?因为有的时候可能会导致一些意外的转换。因此C++当中提供了一个新的关键字叫做explicit,在构造函数当中加上这个关键字之后将会关闭类的隐式转换:

代码语言:javascript
复制
class Time {
  private:
     int minutes;
    public:
     Time();
     explicit Time(int m) {
   minutes = m;
  }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类的转换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档