鱼C论坛

 找回密码
 立即注册
查看: 1252|回复: 3

友元与运算符重载

[复制链接]
发表于 2023-6-9 10:40:04 | 显示全部楼层 |阅读模式
2鱼币
可以帮我解释一下吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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  成员的和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-10 07:11:55 | 显示全部楼层
isdkz 发表于 2023-6-9 10:45
在C++中,友元(Friend)和运算符重载(Operator Overloading)是两个非常重要的概念。

1. 友元(Friend ...

在void myFriendFunction(MyClass &mc)中&mc是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-10 09:46:48 | 显示全部楼层
tttttt@@@@@@ 发表于 2023-6-10 07:11
在void myFriendFunction(MyClass &mc)中&mc是什么意思

在C++中,函数参数的类型声明可能会包含一个或多个修饰符。在这个例子中,"&mc"的"&"是一个引用修饰符,表示参数"mc"是一个对"MyClass"类型对象的引用。

如果没有"&",那么在调用"myFriendFunction"时,会创建"MyClass"的一个新的副本。这被称为按值传递。这样的话,函数内对参数的修改不会影响到原始的"MyClass"对象。

但是,如果使用"&",那么"mc"就会变成对原始对象的引用,而不是一个新的副本。这被称为按引用传递。这样的话,函数内对参数的修改会直接影响到原始的"MyClass"对象。

在这个例子中,"&mc"表示"myFriendFunction"接受一个对"MyClass"对象的引用作为参数。所以,"myFriendFunction"内部对"mc"的修改会直接影响到传入的"MyClass"对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 11:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表