亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++重载机制深度解析:函数重载与运算符重载全攻略

C++允许同一作用域内对函数名或运算符给出多个定义,分别称为函数重载与运算符重载。重载声明:同名、同作用域、参数列表不同(类型/个数/顺序),返回类型不同不构成重载。调用时编译器通过重载决议匹配最佳版本。

函数重载

同名函数,参数列表不同。示例:print()处理int/double/char*:

#include <iostream>
using namespace std;
class printData {
public:
    void print(int i) { cout << "Printing int: " << i << endl; }
    void print(double f) { cout << "Printing float: " << f << endl; }
    void print(char* c) { cout << "Printing character: " << c << endl; }
};
int main() {
    printData pd;
    pd.print(5);         // 调用int版
    pd.print(500.263);   // 调用double版
    pd.print("Hello C++"); // 调用char*版
    return 0;
}

输出:Printing int: 5、Printing float: 500.263、Printing character: Hello C++

运算符重载

重新定义内置运算符行为,使其支持用户自定义类型。重载运算符本质是特殊命名的函数:operator + 运算符符号。如:

Box operator+(const Box&); // 成员函数形式,隐含this指针
// 或非成员函数形式
Box operator+(const Box&, const Box&);

成员函数重载+实现Box相加示例:

#include <iostream>
using namespace std;
class Box {
public:
    double getVolume() { return length * breadth * height; }
    void setLength(double len) { length = len; }
    void setBreadth(double bre) { breadth = bre; }
    void setHeight(double hei) { height = hei; }
    // 重载+:this为左操作数,b为右操作数
    Box operator+(const Box& b) {
        Box box;
        box.length = this->length + b.length;
        box.breadth = this->breadth + b.breadth;
        box.height = this->height + b.height;
        return box;
    }
private:
    double length, breadth, height;
};
int main() {
    Box Box1, Box2, Box3;
    Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0);
    Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0);
    cout << "Volume of Box1 : " << Box1.getVolume() << endl; // 210
    cout << "Volume of Box2 : " << Box2.getVolume() << endl; // 1560
    Box3 = Box1 + Box2; // 调用operator+
    cout << "Volume of Box3 : " << Box3.getVolume() << endl; // 5400
    return 0;
}

可重载/不可重载运算符

可重载(共计约40个):

+-*/%^
&|~!,=
<><=>=++--
<<>>==!=&&||
+=-=/=%=^=&=
|=*=<<=>>=[]()
->->*newnew[]deletedelete[]

不可重载(4个):

::.*.?:

运算符重载分类示例索引

序号重载类型
1一元运算符重载
2二元运算符重载
3关系运算符重载
4输入/输出运算符重载
5++/--运算符重载
6赋值运算符重载
7函数调用()运算符重载
8下标[]运算符重载
9类成员访问->运算符重载

各类详细实现见后续专题章节。

C语言

  1. C++数组传递给函数实战指南
  2. C++类与对象:面向对象编程实战指南
  3. C++ 动态内存管理:new 与 delete 专家级实战指南
  4. C++ 三种继承方式深度解析:public、protected 与 private
  5. C++ 友元函数与友元类:突破访问控制的利器
  6. C语言结构体进阶:传递、返回与引用处理
  7. C++ 运算符全解析:类型、示例与示例程序
  8. C++ 运算符重载实战指南:语法、方法、限制与代码示例
  9. C++ 函数详解:从声明到调用的实战指南
  10. C++日期时间完全指南:ctime库、tm结构体与格式化输出
  11. C++多态实战指南:虚函数、动态绑定与纯虚函数
  12. 精通 Python 运算符重载:实战指南