#include <iostream>
using namespace std;
int main()
{
int a=9, b=4;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
a = a ^ b; b = a ^ b; a = a ^ b;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
return 0;
}
2022assignment-operators-overloading
当用用户自定义类型变量向内置类型变量赋值时,可以使用自定义类型的隐式转换。
#include<iostream>
using namespace std;
class Int{
private:
int n;
public:
Int(int i);
operator int() // 这里就是隐式转换声明,应注意到它与运算符重载的不同之处
{
return n;
}
}
int main()
{
Int a(5);
int c=a; // 隐式调用转换函数
cout<<c<<endl;
cout<<a<<endl; // 由于未重载Int的<<操作符,将隐式调用转换函数
}
2024cpp-examples-calculator-switch-case
参考方法:
2023cpp-examples-swapping
不使用临时变量,使用异或的方法:
2022assignment-operators-overloading
当用用户自定义类型变量向内置类型变量赋值时,可以使用自定义类型的隐式转换。
上述代码的输出将为:
注意谨慎使用隐式转换函数,因为当你在不需要使用转换函数时,这些函数缺可能会被调用运行;这些不正确的程序会做出一些意想不到的事情,而你又很难判断出原因。
2021increment-decrement-operators-overloading
递增和递减运算符重载
1、递增和递减一般是改变对象的状态,所以一般是重载为成员函数。
2、重载递增递减,一定要和指针的递增递减区分开。因为这里的重载操作的是对象,而不是指针(由于指针是内置类型,指针的递增递减是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。
3、递增和递减分为前置和后置情况,a = ++b;(前置), a = b++;(后置)。因为符号一样,所以给后置版本加一个int形参作为区分,这个形参是0,但是在函数体中是用不到的,只是为了区分前置后置。例如:
输出结果:
2020input-output-operators-overloading
习惯上人们是使用 cin>> 和 cout<< 的,得使用友元函数来重载运算符,如果使用成员函数来重载会出现 d1<<cout; 这种不自然的代码。
下面这个实例展示了如果运用成员函数来重载会出现的情况d1<<cout;
运行结果: