首页 > 编程语言 >C++ 友元跨命名空间使用

C++ 友元跨命名空间使用

时间:2024-11-14 20:29:19浏览次数:1  
标签:友元 const namespace Dog C++ private 命名 mydog

+运算符重载为例:

#include <iostream>
#include <string>

// 前置声明是必须的
namespace mydog
{
    class Dog;
}

namespace myadd
{
    mydog::Dog operator+(const mydog::Dog dog1, const mydog::Dog dog2);
}

namespace mydog
{
    class Dog
    {
        friend Dog myadd::operator+(const Dog dog1, const Dog dog2);
    private:
        std::string name{ "小黑" };
        int age{ 2 };
    public:
        void show()
        {
            std::cout << "名字:" << name << "    " << "年龄:" << age << '\n';
        }
        Dog() = default;
        Dog(const std::string &n, int a):name{n}, age{a}{}
    };
}

mydog::Dog myadd::operator+(const mydog::Dog dog1, const mydog::Dog dog2)
{
    mydog::Dog my_dog_add;
    my_dog_add.age = dog1.age + dog2.age;
    my_dog_add.name = dog1.name + "+" + dog2.name;
    return my_dog_add;
}

int main()
{
    using mydog::Dog;
    Dog dog1("小花", 3);
    Dog dog2;

    using myadd::operator+; // 必须不然找不到函数,或者直接 using namespace myadd;加入命名空间
    Dog addDog = dog1 + dog2;
    addDog.show();

    system("pause");
    return 0;
}

输出:

名字:小花+小黑    年龄:5

类型的前置声明貌似是必须的,不然编译器好像连接不到。

另外,友元关系不继承,且与放到private或public无关。

标签:友元,const,namespace,Dog,C++,private,命名,mydog
From: https://www.cnblogs.com/huvjie/p/18546750

相关文章

  • C++builder中的人工智能(29):如何在Windows项目中导入FANN库
    这篇文章旨在使用由SteffenNissen开发的FANN库实现人工神经网络。FANN库支持20多种编程语言,包括Delphi和C++Builder。您可以在FANN的官方网站上找到完整信息和文档,并下载FANN的源文件。步骤:下载FANN库:从Nissen的官方网站下载FANN库包(http://leenissen.dk),包含二进制文......
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
    人工智能软件和硬件技术正在迅速发展。我们每天都能看到新的进步。其中一个巨大的飞跃是我们拥有更多基于自然语言处理(NLP)和深度学习(DL)机制的逻辑性更强的AI聊天应用。有许多AI工具可以用来开发由C、C++、Delphi、Python等编程语言驱动的AI。本文将解释如何在C++Builder中使用......
  • C++builder中的人工智能(28):FANN: Fast Artificial Neural Networks快速人工神经网络(ANN
    这篇文章全面介绍了快速人工神经网络(ANNs)的世界,探讨了它们在现代计算智能中的重要地位、核心特点、应用领域以及未来发展。快速人工神经网络库(FastArtificialNeuralNetworkLibrary,简称FANN)是一个免费的开源神经网络库,它使用C语言实现了多层人工神经网络,并支持全连接和稀疏......
  • c++简介
    C++是一种面向对象的程序设计语言,它是在C语言的基础上发展起来的。C++拥有C语言的特性,例如高性能、底层控制和直接内存访问等,同时还添加了面向对象编程的特性,比如封装、继承和多态等。由于这些特性,C++在软件开发中非常灵活和强大。C++的应用非常广泛,它可以用于开发各种类型的......
  • 告别头文件,编译效率提升 42%!C++ Modules 实战解析
    编者按:AlibabaCloudLinux(简称“Alinux”)是目前阿里云上占比第一的操作系统。2021年,龙蜥以Alinux产品为基础发布了AnolisOS8正式版。本文中,阿里云智能集团开发工程师李泽政以Alinux为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个C++模......
  • Rust和C++在游戏开发过程中会有怎样的区别,快来看看吧,有具体案例哦!!!
    Rust作为一种系统级编程语言,以其性能、安全性和并发处理能力著称,在游戏开发中找到了越来越多的应用场景。首先说一下Rust在游戏开发的场景应用有哪些以下是Rust在游戏开发中的几个主要应用方向:1.游戏引擎开发Amethyst:这是一个完全用Rust编写的游戏引擎,专注于易用性......
  • 区块反转c++
    代码#include<iostream>#include<vector>usingnamespacestd;structnode{  intdata,next;}A[100001];vector<int>L,ans,E[100001];ints,n,a,t,k,mark,cnt,c;intmain(){  cin>>s>>n>>k;  for(......
  • C++玩转物联网:认识树莓派Pico
     在嵌入式编程的领域中,树莓派Pico、Arduino和ESP32都是广受欢迎的微控制器开发板,但它们在性能、功能和编程语言支持上各有特点。树莓派Pico是树莓派基金会推出的一款高性价比开发板,搭载了RP2040微控制器,支持标准的C++库,在初学者和爱好者中迅速流行。本文将带您了解树莓派Pico......
  • 【C++】STL--queue、deque、priority的模拟实现和应用
    目录1、queue的介绍1.2queue的常规操作 2、queue的模拟实现 3、priority_queue(优先级队列)的介绍和实现3.1priority_queue的使用 3.2 priority_queue的应用 3.3 priority_queue的模拟实现4、deque4.1deque的原理介绍4.2deque的缺陷4.3 为什么选择deque作......
  • 代码随想录算法训练营第三十天| 452. 用最少数量的箭引爆气球 、435. 无重叠区间 、76
    452.用最少数量的箭引爆气球思路:以前做过最大不相交子序列的题,这次也是往这根据某一端排序的思路想的,排序后如下图,只需要维护一个公共序列的右边界r就可以了,下一次判断时,只需要判断子区间的左边是否小于r。这个题有点坑的是使用Arrays排序,如果使用昨天的方法:Arra......