C++的内置类型和用户自定义类型的互相转换

这两种之间的转换主要有两种方式第一就是内置类型转换为用户自定义类型,这里以int类型转换为类类型的对象为例,第二就是类类型转换为int类型

前者依靠转换构造函数,后者依靠自定义的类型转换函数

一.转换构造函数

二.类型转换构造函数

#include <iostream>
using namespace std;

//转换构造函数只有一个参数,但是有时候这种一个参数的构造函数不仅起到类型转换的作用也起到了构造函数的作用,但是只有一个参数的构造函数才有这种类似的双重身份,并且这种没有拷贝构造的情况就调用默认拷贝构造
class Trans
{
private:
	int m_data;
public:

	Trans(const Trans &t)
    {
        cout<<"Copy Test Obj : "<<this<<"\n";
        m_data = t.m_data;
    }
    Trans& operator=(const Trans &t)
    {
        cout<<"Assgin:"<<this<<" : "<<&t<<"\n";
        if(this != &t)
        {
            m_data = t.m_data;
        }
        return *this;
    }
	~Trans()
    {
        cout<<"Free S Obj :"<<this<<"\n";
    } 

	//重点在底下的函数
	Trans(int=0);
	operator int();
	void show();
};

int main()
{
	cout<<"-------转换构造函数------------\n";
	Trans  X=Trans(3);//调用构造函数生成一个临时无名对象之后调用拷贝构造函数进行
    X.show();

	Trans X1=6;//同上
    X1.show();

    X1=8;//这里同上只是调用赋值函数
	X1.show();

	cout<<"-------类型转换函数------------\n";
  Trans Y(99),Y1(1);
  Trans Y2;
  Y2=Y1+Y;//没有+运算符的重载,编译器就会找到类型转换函数将两个对象转换为数值之后相加然后用相加的值构造一个临时对象再调用赋值函数给Y2
  Y2.show();
   int a=0;
   a=Y2;
   cout<<a<<"\n";

	return 0;
}

Trans::Trans(int n):m_data(n)
{
	cout<<"Ctor the obj!"<<this<<"\n";
}

Trans::operator int()
{
	cout<<"Operator obj to int !"<<this<<"\n";
	return m_data;
}

void Trans::show()
{
cout<<"Data is:  "<<m_data<<"  Obj  is:   "<<this<<"\n";
}

时间: 2024-08-02 05:10:24

C++的内置类型和用户自定义类型的互相转换的相关文章

javascript 内置类型

JavaScript有七种内置类型: 空类型:null 未定义:undefined 布尔:boolean 数字:number 字符串:string 对象:object 符号:symbol(ES6新增)除了对象之外,其他为基本类型.

[转]java基本类型(内置类型)取值范围

原文地址:java求职重点归纳(8)--基本类型(内置类型)例作者:smallcat 例1: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.p

C++ Primer(第五版) 第二章 基本内置类型

容易忘记的部分: 2.1:C++提供的几种字符串类型有哪些及其用途? 基本的字符类型char,一个char的类型和一个机器字节一样 其他字符类型用于拓展字符集,如wchar_t.char16_t.char32_t wchar_t类型确保可以存放机器最大拓展字符集中的任意一个字符 char16_t和char32_t则为Unicode字符集服务 2.2:如何选择所使用的类型 当数值不为负数时,使用无符号类型(unsigned) 一般常用int和long long执行整数的运算 算术表达式中不使用ch

javascript 判断对象的内置类型

判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.在toString方法被调用时,会执行下面的操作步骤:1. 获取this对象的[[Class]]属性的值.2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串.3. 返回第二步的操作结果Result(2).Object.prototype.toString方法返回的字符串,去掉前面固定的"[

第2章 变量和基本内置类型

2.1 算术类型 bool char character 8 wchar_t wide character 16 char16_t Unicode character 16 char32_t Unicode character 32 short short integer 16 int integer 16 long long integer 32 long long 64 float single-precision floating-point 6 significant digits do

C++要点(1):基本内置类型

掌握各种基本类型是在编程中正确处理各种数据的前提,在计算机中数据存储和传输以位(bit)为单位,每8个位bit组成1个字节(Byte).32位计算机的字长位32,即4个字节:对应的,64位计算机的字长为64,即8个字节. bool的长度为1个字节,即8位. char的长度为1个字节,而C++特有的wchar_t为2个字节,即16位. int通常为1个字长,short为半个字长,long为1个或2个字长. ?float 的长度为一个字长,double为两个字长,long double为3个或4个字

边做边学Rust之用户自定义类型

3 用户自定义类型 Rust自定义类型主要通过下面两个关键进行定义: struct:定义一个结构 enum:定义一个枚举 常量能以通过const和static关键字创建. 3.1 结构 有三种类型的结构("structs"),可以使用struct关键字来创建: 元组结构体,又名元组 传统C结构体 元结构体,无field,为了做成通用类型 // A unit struct struct Nil; // A tuple struct struct Pair(i32, f64); // A

C++内置类型对象之间的转换

C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上. 隐式类型转换发生在下列这些典型情况下. 1. 在混合类型的算数表达式中 规则:在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换. 例子: 1 int ival = 3; 2 double dval = 3.14159; 4 // ival被提升为double类型:3.0 5 ival + dval; 2. 用一种类型的表达式赋值给另一种类型的对象 规则:这种情况下目标转换类型是被赋值对象的类型.

golang的内置类型map的一些事

golang的map类型是一个比较特殊的类型,不同于int, string, byte这样的基本类型,在经过一番探究之后得出了一些结论: 1.golang的map类型虽然是内置类型,但和基本类型有很大区别,更像是一个指针,因为他有着跟指针一样行为. 下面这段代码的第三次输出时,尝试了用通过arr[1].c["aaa"] = "lalala",这种方式去修改这个map元素,发现arr[0]同时被改变了.这也就说明了arr里面保存的其实是指向一块内存的指针,所以在通过a