面向对象程序设计-C++_课时30运算符重载——基本规则_课时31运算符重载——原型_课时32运算符重载——赋值_课时33运算符重载——类型转换

区分初始化,赋值

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Fi
 5 {
 6 public:
 7     Fi() {}//1构造函数
 8 };
 9 
10 class Fee
11 {
12 public:
13     Fee(int) {}//2构造函数
14     Fee(const Fi&) {}//3构造函数
15 };
16 
17 void main()
18 {
19     Fee fee = 1;//2构造函数
20     Fi fi;//1构造函数
21     Fee fum = fi;//3构造函数
22     fum = fi;//赋值
23 
24     system("pause");
25 };

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class One
 5 {
 6 public:
 7     One() {}
 8 };
 9 
10 class Two
11 {
12 public:
13     explicit Two(const One&) {}
14 };
15 
16 void f(Two) {}
17 
18 void main()
19 {
20     One one;
21 
22     //f(one);//error C2664: “void f(Two)”: 无法将参数 1 从“One”转换为“Two”
23 
24     f(Two(one));//构造一个类Two
25 
26     system("pause");
27 };
原文地址:https://www.cnblogs.com/denggelin/p/5639273.html