火龙果king 2023-08-14 15:09 采纳率: 50%
浏览 13
已结题

c++面向对象的问题:operator

谁能告诉我,c++的friend 和 operator怎么用啊?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-14 19:35
    关注

    【以下回答由 GPT 生成】

    友元函数在C++中允许一个函数访问类的私有成员和受保护成员。操作符重载(operator overloading)允许为已有的操作符定义新的行为。在C++中,我们可以结合使用友元函数和操作符重载来实现面向对象的编程。

    使用friend实现友元函数

    首先,我们需要在类的定义中声明友元函数。例如,我们希望在类A中定义一个友元函数,可以访问类A的私有成员和受保护成员:

    class A {
    private:
        int privateMember;
    
    protected:
        int protectedMember;
    
    public:
        friend void friendFunction(A&);
    };
    

    在类定义后,我们需要在类外部定义友元函数并实现它:

    void friendFunction(A& obj) {
        obj.privateMember = 10;
        obj.protectedMember = 20;
    }
    

    在友元函数内部,我们可以直接访问类A的私有成员和受保护成员。

    使用friend实现友元类

    友元类允许一个类的所有成员函数访问另一个类的私有成员和受保护成员。在C++中,我们可以通过在类的定义中声明友元类来实现这个特性。例如,我们希望类B是类A的友元类:

    class A {
        friend class B;
    
    private:
        int privateMember;
    
    protected:
        int protectedMember;
    };
    
    class B {
    public:
        void memberFunction(A& obj) {
            obj.privateMember = 10;
            obj.protectedMember = 20;
        }
    };
    

    在类B中,我们可以直接访问类A的私有成员和受保护成员。

    使用操作符重载实现对象间的操作

    C++中,我们可以对已有的操作符重载定义新的行为,例如+、-、*等。我们可以通过定义一个以关键字operator开头的成员函数来重载操作符。以下是一个简单的例子,展示如何定义一个类来支持两个对象的相加操作:

    class MyNumber {
    private:
        int value;
    
    public:
        MyNumber(int val) : value(val) {}
    
        MyNumber operator+(const MyNumber& rhs) {
            return MyNumber(value + rhs.value);
        }
    
        void print() {
            std::cout << value << std::endl;
        }
    };
    

    在这个例子中,我们重载了操作符+,并通过定义名为operator+的成员函数来实现相加操作。这个成员函数接受一个MyNumber类型的参数,并返回一个新的MyNumber对象。

    我们可以通过以下示例代码来测试这个类的操作:

    int main() {
        MyNumber num1(5);
        MyNumber num2(10);
    
        MyNumber result = num1 + num2;
    
        result.print(); // 输出 15
    
        return 0;
    }
    

    运行上述代码会输出15,其中num1和num2对象的值分别为5和10,相加操作结果保存在result对象中,并通过print函数输出。

    以上就是使用friend和operator进行面向对象编程的基本介绍和示例代码。希望能够解答你的问题,如果还有其它疑问,请随时提出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 8月14日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据