博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus 学习笔记 第十一章 类的自动转换和强制类型转换 转换函数
阅读量:4127 次
发布时间:2019-05-25

本文共 1488 字,大约阅读时间需要 4 分钟。

先说下随机数rand()

C++ 类的转换, 是指基本类型转换成类类型

构造函数添加对相应数据类型的参数 然后生成一个对象。

比如 class A

aa.hclass A{private:    doube aaa;public:    A(double x);}aa.cpp#include "aa.h"A::A(double x){    aaa = x;}

然后在操作时候就可以这样 A b = 3.3;

这样C++会对3.3进行自动转换

如果想想关掉这个自动转换,就加上 explicit声明

explicit A(double x);

但依然接收强制类型转换

A c = A(3.3);

最后一点有个前提,没有其他类型参数的构造函数跟double相符 嗯。。。意思就是 如果传入的参数是long a = 1 那正常double会将long转换成double,但是如果这时候有 A(int b)构造函数 那就会出现二义性。编译器会报错 因为 long可以转换成int 也可以转换成double 

转换函数:

上面说的是将基本类型转换成类类型

那如果碰到需要将类类型转换成基本类型呢?

这么干:

哇~ 这不是运算符重载么  666

示例:

Stonewt::operator int() const{  return int (pounds + 0.5);}Stonewt::operator double() const{  return pounds;}int main(){  using std::cout;  Stonewt poppins(9, 2.8);  double p_wt = poppins;  cout << "Convert to double => ";  cout << "Poppins: " << p_wt << " pounds.\n";  cout << "Convert to int => ";  cout << "Poppins: " << int(poppins) << " pounds.\n";  return 0;}

在这里 如果cout中不使用强制类型转换 将会出现二义性错误因为Stonewt可以转换成int型,也可以转换成double型 咋搞 报错好了

所以显示的强制类型转换 指明要转换的类型

这个也适用于前面的将类类型赋值给基本类型时候的情景。 

ing c = (int) A (随便举个例子 跟前面举例无关)

同样的 如果不希望编译器进行隐式的自动转换 就在operator 声明的前面加上 explicit 这样就不允许隐式转换了

或者还有一种方法:

int A::A_to_int() { return int (0.5);}

这样 使用 int b = A 就不行= = 这个。。。不就是不用Operator int()么= =

最后一个转换函数和友元函数的那个 。嗯。。。说的绕 不是很明白到底要表示啥

应该是 如果使用了A(double l)和 operator+(A &a) 或者相应的友元函数 friend A operator+ (A &a, A &b)  然后又设置了 operator double()(之类的)

那有可能在实际使用中出现二义性。 和转换不确定的情况。所以 建议 

第一种方法: 不要去设置operator double()  

第二种方法: operator+()和友元函数传入的参数显示的设置为double 

这部分我是大概这么理解 有点绕  等以后再慢慢深入理解吧  

第十一章完结

转载地址:http://bnepi.baihongyu.com/

你可能感兴趣的文章
ThreadLocal
查看>>
从Executor接口设计看设计模式之最少知识法则
查看>>
OKhttp之Call接口
查看>>
application/x-www-form-urlencoded、multipart/form-data、text/plain
查看>>
关于Content-Length
查看>>
WebRequest post读取源码
查看>>
使用TcpClient可避免HttpWebRequest的常见错误
查看>>
EntityFramework 学习之一 —— 模型概述与环境搭建 .
查看>>
C# 发HTTP请求
查看>>
启动 LocalDB 和连接到 LocalDB
查看>>
Palindrome Number --回文整数
查看>>
Reverse Integer--反转整数
查看>>
Container With Most Water --装最多水的容器(重)
查看>>
Longest Common Prefix -最长公共前缀
查看>>
Letter Combinations of a Phone Number
查看>>
Single Number II --出现一次的数(重)
查看>>
Valid Parentheses --括号匹配
查看>>
Remove Element--原地移除重复元素
查看>>
Remove Duplicates from Sorted Array--从有序数组中移除重复元素
查看>>
Count and Say
查看>>