目录
1. 函数重载
1.1 定义:
1.2 特点:
1.3 函数重写(Function Overriding)
2.运算符重载
运算符重载的基本概念
1. 函数重载
1.1 定义:
函数重载允许在同一个作用域中定义多个同名函数,它们的参数列表必须不同。参数列表的不同可以通过参数的数量、类型或者顺序来区分。
1.2 特点:
- 同名:重载的函数名称相同。
- 参数列表不同:可以通过不同的参数数量、类型或顺序来区分。
- 函数重载要求参数列表必须有区别。这可以通过以下方式实现:
- 参数顺序不同:如一个函数接受
(int, double),另一个接受(double, int)。 - 参数类型不同:如一个函数接受整数,另一个接受浮点数。
- 参数数量不同:如一个函数有两个参数,另一个有三个参数。
- 参数顺序不同:如一个函数接受
- 返回类型无关:返回类型不能用于区分重载,只有参数列表才起作用。
#include <iostream> using namespace std; // 实现逻辑的辅助函数 void printValue(int value) { cout << "打印整数: " << value << endl; } void printValue(double value) { cout << "打印双精度数: " << value << endl; } // 函数重载 void print(int a) { printValue(a); // 调用实现相同的辅助函数 } void print(double b) { printValue(b); // 调用实现相同的辅助函数 } int main() { print(10); // 调用 print(int) print(3.14); // 调用 print(double) return 0; }1.3 函数重写(Function Overriding)
定义:在派生类中重新定义基类中已经存在的虚函数,具有相同的名称和参数列表。
特征:
1.基类中的函数必须是虚函数(使用 virtual 关键字)。
2.重写的函数与基类中的函数具有相同的签名。(具有相同的名称和参数列表)
3.实现多态性,通过基类指针或引用调用时,可以根据对象类型选择调用相应的函数。
2.运算符重载
C++ 允许重载大部分内置运算符,使得用户可以定义自定义类型(如类)的行为。当我们重载运算符时,可以使用更自然的方式来处理对象之间的运算。
运算符重载的基本概念
本质都是:这是给你自己定义的Vector类型重载+运算符。
“告诉编译器:遇到这个符号和我的类一起出现时,应该调用哪个函数。
运算符重载函数:运算符重载是通过定义特定名称的函数来实现的。函数名由关键字
operator和运算符符号组成。例如,要重载加法运算符+,函数名为operator+。返回类型和参数列表:与普通函数一样,重载的运算符函数需要定义返回类型和参数列表。
访问控制:运算符重载函数可以是成员函数或非成员函数。成员函数通常用于操作对象的自身属性,而非成员函数用于处理两个不同对象之间的操作。
#include <iostream> using namespace std; class Vector { private: float x, y; public: Vector(float x = 0, float y = 0) : x(x), y(y) {} // 重载加法运算符 Vector operator+(const Vector& other) const {other 是一个初始化为 Vector型引用 return Vector(this->x + other.x, this->y + other.y); } void display() const { cout << "Vector(" << x << ", " << y << ")" << endl; } }; int main() { Vector v1(1.0, 2.0); Vector v2(3.0, 4.0); Vector v3 = v1 + v2; // 使用重载的 + 运算符 v3.display(); // 输出: Vector(4, 6) return 0; }1.第一个const:参数修饰符
const Vector& other:这里的
const表示传入的other参数是一个常量引用(constant reference)。这意味着在operator+方法的实现中,不能修改other的值。
2.第二个const:成员函数修饰符
const在函数后面:这个
const关键字修饰了operator+方法本身,表示这个成员函数不会修改调用它的对象的任何数据成员。这意味着在operator+方法内部,不能更改当前对象(即this指向的对象)的状态。