C++ 隐式类类型转换和转换操作符
来源:互联网 发布:淘宝网的卖家中心在哪 编辑:程序博客网 时间:2024/05/29 18:03
- 隐式类类型转换
C++语言定义了内置类型之间的几个自动转换。也可以定义如何将其他类型的对象隐式转换为我们的类类型,或将我们的类类型的对象隐式转换为其他类型。为了定义到类类型的隐式转换,需要定义合适的构造函数。可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。
class Sales_item{public: Sales_item(const std::string & isbn):s(isbn){ cout << isbn << endl; } Sales_item(int number):n(number){ cout << number << endl; }private: std::string s; int n;};bool func(Sales_item si){ return true;}int main(){ std::string null_book = "9-999-99999-9"; int number = 30; func(null_book);//这里将string类型转换为Sales_item func(number);//这里将int类型转换为Sales_item system("pause"); return 0;}
输出结果:
使用一个string类型对象作为实参传给func函数,编译器使用接收一个string的Sales_item构造函数从null_book生成一个新的Sales_item对象,新生成的(临时的)Sales_item被传递给func函数。
如果要抑制由构造函数定义的隐式转换,则需要将构造函数声明为explicit:
会报错:
也可以为转换显式使用构造函数:
但是此时,如果我们企图把Sales_item类型转换为int类型:
就会报错:
如果要实现这样的赋值,就需要用到转换操作符:
class Sales_item{public: Sales_item(const std::string & isbn):s(isbn){ cout << isbn << endl; } Sales_item(int number) :n(number){ cout << number << endl; } operator int() const { return n; } operator string() const { return s; }private: std::string s; int n;};bool func(Sales_item si){ return true;}int main(){ std::string null_book = "9-999-99999-9"; int number = 30; func(Sales_item(null_book)); func(Sales_item(number)); Sales_item si(30); Sales_item si2("a-123-12345-9"); cout << "------------------------------------------" << endl; string s = si2; cout << s << endl; int number2 = si; cout << number2 << endl; system("pause"); return 0;}
输出结果:
阅读全文
0 0
- 类型转换和操作符重载 (c#)
- C++ 隐式类类型转换和转换操作符
- C\C++类型转换操作符
- 类型转换操作符
- 类型转换操作符
- 类型转换操作符
- 类型转换操作符
- 【操作符】 - 字符串操作符 和 类型转换操作符
- 《Effective C#》 Item 28: 避免使用类型转换操作符
- C++primer 5.4 赋值操作符(2.1 类型转换)
- C++类型转换操作符---补充(8)《Effective C++》
- 强制类型转换操作符
- C++类型转换操作符
- C++类型转换操作符
- C++类型转换操作符
- boost 类型转换操作符
- C++类型转换操作符
- RxJava转换类型操作符
- Selenium2.0 WebDriver功能测试入门(Java版)
- JAVA设计模式--单例模式
- 算法谜题66 留下的数字
- 嵌入式笔试题(2)
- liunx 下自动运行爬虫
- C++ 隐式类类型转换和转换操作符
- zookeeper伪集群(一)
- Hadoop配置文件
- AngularJS中service,factory,provider的区别
- 32位win10如何装64位win10?
- MFC 获取屏幕像素大小
- AtomicInteger的介绍和使用
- 【期刊&&会议】机器学习&&深度学习 + 计算机视觉(To be continued..)
- groovy 文件的读取