C++ 类类型隐式转换

来源:互联网 发布:软件公司财务报销制度 编辑:程序博客网 时间:2024/06/04 23:33

隐式类类型转换:“可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。”(C++ Primer)首先要单个实参,你可以把构造函数colour的默认实参去掉,也就是定义一个对象必须要两个参数的时候,文件编译不能通过。

(以上只是将内置类型转换为自定义类型)


重载double,int 将用户自定义数据类型转换为内置类型





当构造函数只有一个参数,而且该参数又不是本类的const和引用时,这种函数叫做转换构造函数


#include<iostream>using namespace std;class Complex{public:Complex() :real(0), imag(0){}Complex(double r, double i) :real(r), imag(i){}//当构造函数只有一个参数,而且该参数又不是本类的const和引用时,这种函数叫做转换构造函数Complex(double r) :real(r), imag(0){}void Print(){cout << "real=" << real << "image=" << imag << endl;}Complex &operator+(Complex c){return Complex(this->real + c.real, this->imag+ c.imag);}private:double real;double imag;};int main(){Complex c;c = 1.2;//1.2调用转换构造函数,1.2将赋值给realc.Print();Complex c1(2.9, 4.2);Complex c2 = c1 + 3.1;//调用转换构造函数将3.1转换为Complex类型c2.Print();system("pause");return 0;}


重载double int,实现类类型转换


#include<iostream>class fushu{public:fushu(int num){x = num;y = num;}void print()//输出{std::cout << x << "+" << y << "i" << std::endl;}operator int();//不支持友元,仅仅支持成员函数operator double(){return double(x + y);}private:int x;int y;};fushu::operator int()  //类类之间的转换函数{return x*y;}void main(){int num(100.9);fushu fushu1(num);//构造函数fushu1.print();int data = (int)fushu1 + 10;//类型转换可以把一个自定义类型当做基本数据类型来计算std::cout << data << std::endl;int data(fushu1);//转换data = fushu1;std::cin.get();int  num1(10.8);fushu fushu1 = (fushu)10.8;fushu fushu1 = static_cast<fushu>(10.8);}

如要要阻止隐式类型转换的话,C++提供了一种抑制构造函数隐式转换的办法,就是在构造函数前面加explicit关键字






0 0
原创粉丝点击