|
发表于 2023-6-9 10:45:09
|
显示全部楼层
在C++中,友元(Friend)和运算符重载(Operator Overloading)是两个非常重要的概念。
1. 友元(Friend): 友元函数或友元类可以访问包含它的类的私有和保护成员。你可以通过在类定义中使用 "friend" 关键字来声明友元函数或类。
例如,如果我们有一个 "MyClass" 类,并希望一个名为 "myFriendFunction" 的函数能够访问它的私有成员,我们可以这样声明它:
- class MyClass {
- public:
- MyClass(int x): x(x) {}
- // 声明友元函数
- friend void myFriendFunction(MyClass &mc);
- private:
- int x;
- };
- // 实现友元函数
- void myFriendFunction(MyClass &mc) {
- cout << "Accessing private member of MyClass: " << mc.x << endl;
- }
复制代码
在这个例子中,即使 x 是私有的,"myFriendFunction" 仍然可以访问它,因为它被声明为 "MyClass" 的友元函数。
2. 运算符重载(Operator Overloading): 运算符重载允许你重新定义大多数内置的运算符的行为,使它们在你的类的对象上执行自定义的操作。为了重载一个运算符,你需要提供一个函数,函数名是 "operator" 加上你想要重载的运算符。
例如,如果我们希望能够使用 "+" 运算符将两个 "MyClass" 对象的 x 成员相加,我们可以这样重载 "+" 运算符:
- class MyClass {
- public:
- MyClass(int x): x(x) {}
- // 重载 + 运算符
- MyClass operator+(const MyClass &other) {
- return MyClass(this->x + other.x);
- }
- private:
- int x;
- };
复制代码
然后,我们就可以使用 "+" 运算符来添加两个 "MyClass" 对象:
- MyClass a(10);
- MyClass b(20);
- MyClass c = a + b; // c 的 x 成员现在是 30
复制代码
在这个例子中,"+" 运算符被重载以返回一个新的 "MyClass" 对象,其 x 成员是两个被加对象的 x 成员的和。 |
|