一. 运算符的重载
1.C++中绝大部分的运算符允许重载,不能重载的运算符如下:
. 成员访问运算符
*成员指针访问运算符
:: 作用域运算符
sizeof 长度运算符
? : 条件运算符
2.重载不能改变运算符的操作对象(即操作数)的个数
3.重载不能改变运算符原有的优先级
4.重载不能改变运算符原有的结合特性
二. 重载函数的语法形式
函数类型 operator 运算符 (形参表)
函数重载示例如下:
- 产品类Product的运算符重载++,–
描述
定义一个产品类 Product 表示某类电子产品,该类有两个私有属性:
private:
int level; //产品等级
int price; //产品价格
产品默认等级为1,价格为70,此后每增加一个等级,相应价格增加70。
根据下面的 main() 函数的代码完善 Product 类的定义,定义构造函数及输出函数,并且用成员函数重载单目运算符前置 ++ ,表示等级加 1,对于价格加 70;用友元函数重载单目运算符后置 --,表示等级减 1,对应价格减 70,请写出完整的程序。
主函数 main() 如下:
int main() {
int level, price;
cin >> level >> price;
Product obj1(level, price);
cin >> level >> price;
Product obj2(level, price), obj3;
obj1.print();
obj2.print();
obj3 = ++obj2;
obj2.print();
obj3.print();
obj3 = obj1–;
obj1.print();
obj3.print();
return 0;
}
输入
输入两个产品的等级、价格。
输出
产品1的信息
产品2的信息
产品2变化一次后的信息
产品3的信息
产品1变化一次后的信息
产品3的信息
输入输出示例
输入
示例 1
2 140
3 210
输出
Level=2, Price=140
Level=3, Price=210
Level=4, Price=280
Level=4, Price=280
Level=1, Price=70
Level=2, Price=140
#include<bits/stdc++.h>
using namespace std;
class Product
{
int level=1;
int price=70;
public:
Product(){}
Product(int a, int b)
{
level = a; price = b;
}
Product(Product const& a)
{
level = a.level;
price = a.price;
}
Product operator ++()
{
level += 1;
price += 60;
Product A(level, price);
return A;
}
Product operator --(int a)
{
Product A(level, price);
level -= 1;
price -= 60;
return A;
}
void print()
{
cout << "Level=" << level << ", Price=" << price << endl;
}
};
int main() {
int level, price;
cin >> level >> price;
Product obj1(level, price);
cin >> level >> price;
Product obj2(level, price), obj3;
obj1.print();
obj2.print();
obj3 = ++obj2;
obj2.print();
obj3.print();
obj3 = obj1--;
obj1.print();
obj3.print();
return 0;
}
- n个数求和函数重载
描述
编写重载函数myAdd可分别求取两个整数,三个整数,两个双精度数之和。
程序代码如下:
#include
using namespace std;
/********* Begin *********/
//两个整数之和函数定义
//三个整数之和函数定义
//两个双精度数之和函数定义
/********* End *********/
int main() {
int a, b, c;
cin >> a >> b >> c;
cout << myAdd(a, b) << endl;
cout << myAdd(a, b, c) << endl;
cout << myAdd(a * 1.25, b * 1.35) << endl;
return 0;
}
输入
输入3个整数。
输出
两个整数之和
三个整数之和
两个双精度数之和
输入输出示例
输入
示例 1
1 2 3
输出
3
6
3.95
#include <iostream>
using namespace std;
template <class T>
T myMul(T a, T b, T c = 1)
{
return a * b * c;
}
int main() {
int a, b, c;
cin >> a >> b >> c;
cout << myMul(a, b) << endl;
cout << myMul(a, b, c) << endl;
cout << myMul(a * 1.35, b * 1.45) << endl;
return 0;
}