C++,名称空间、运算符重载、模板/泛型

news2024/12/23 18:19:33

 

目录

一、名称空间

 二、重载运算符

三、模板/泛型


一、名称空间

  • C++中名称空间可以区别同名C风格函数、同名C风格全局变量、同名类。
  • 名称空间还可以无限嵌套。

        namespace ns1 { ..... namespace ns2 { ..... } }

  • 同一个名称空间名字可以多处书写,比如,在demo1.h中namespace ns1{},在另一个demo1.h中也可以写namespace ns1{}, 最终编译器会认为是同一个名称空间。
  • 使用有名称空间的函数、变量或类时,要导入名称空间,可以在文件开头使用"using namespace 名称"导入,也可以在使用时使用 "名称::"。
  • 若出现以下情况,调用时需在函数前加入对应的名称空间:

 二、重载运算符

1、概念

函数可以重载,运算符也可以重载。C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。

2、规则

  1. C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
  2. C++允许重载的运算符, 不能重载的运算符只有5个:"."、"->"、"? : "、"sizeof"、"类型转换运算符(static_cast、dynamic_cast 等)"
  3. 其中“=”和“&”不必用户重载。
  4. 重载不能改变运算符运算对象(即操作数)的个数。
  5. 重载不能改变运算符的优先级别。
  6. 重载不能改变运算符的结合性。
  7. 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第"4"点矛盾
  8. 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
  9. 应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能
  10. 运算符重载函数可以是 C函数,友元C函数、类的成员函数

3.示例1:类的成员函数

       “+”需要两个操作数,其中this已经代表了i1对象。

4 示例2:(友元)普通函数

       友元函数是为了能够访问私有成员,如果x与y改为public,也可以不使用友元。

5 示例3:重载[]

#include <iostream>
using namespace std;
class MyArray {
private:
    int arr[5];
public:
    int& operator[](int index) {
        if (index < 0 || index >= 5) {
            // 处理错误情况,例如抛出异常
            throw std::out_of_range("Index out of range");
        }
        return arr[index];
    }
};
int main() {
    MyArray myArray;
    myArray[0] = 10; // 对下标为0的元素进行赋值
    int value = myArray[0]; // 获取下标为0的元素的值
    cout<<value<<endl;
    return 0;

}

6 示例4:重载=

#include <iostream>
using namespace std;
#include<string>
class Test {
private:
    int x;
    int y;
public:
    void show();
    Test(int, int);
    Test & operator = (const Test &);
};
void Test::show() {
    cout<<"x="<<x<<"y="<<y<<endl;
}
Test::Test(int x, int y):x(x),y(y) {cout<<x<<":"<<y<<endl;}
Test & Test::operator = (const Test & obj) {
    this->x = obj.x;
    this->y = obj.y;
    return  *this;
}
int main()
{
    Test t1(1,2);
    Test t2(100,200);
    t2 = t1;//触发重写的赋值函数
    t2.show();
    Test t3 = t1;//触发拷贝构造函数
    t3.show();
    return 0;
}

7 示例5:前++,后++重载

三、模板/泛型

    模板是一多态的一种体现,模板的声明与定义不能分开写在不同文件中,一般开发是把模板的声明与实现放在同一个头文件中。或者直接在头文件中定义。

1、函数模板

    声明数据类型参数标识符的关键字既可以用class也可以用typename.它们等效.

    template <class 形参名,class 形参名,......>

    返回类型 函数名(参数列表)

    { 函数体 }

    模板类型接收字符串时如果没有明确类型则会默认为const *char 类型。

    编译器会对函数进行函数实例化,分编译器自动实例化和显示实例化

2、函数模板特例化

示例说明:

    对于模板函数 T Max(T a, T b)的函数体能处理类型char, int等的处理,但是如果a,b接收到的参数为字符串,则就不能正常处理了,所以针对这种情况,就特化(重写)了新的函数

    const char * Max(const char *a, const char *b),函数体中采用新的方式专门用于处理string的大小比较。

3、类模板

    类模板可以通过template定义1到多个类型,类的声明与函数实现可以不分开写,如果分开写,要写在同一个头文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云最新优惠活动有哪些?活动入口在哪里?

腾讯云作为国内知名的云计算服务提供商&#xff0c;为了吸引用户&#xff0c;经常推出各种优惠活动。以下是近期腾讯云的一些优惠活动及其入口&#xff1a; 一、腾讯云新用户优惠券【点此领取】 腾讯云新用户专属大礼包&#xff0c;无门槛领取总价值高达2860元代金券&#xff…

postmain 存储接口返回值

1、postmain 存储接口返回值 //把json字符串转化为对象 var dataJSON.parse(responseBody);//获取data对象的utoken值。 var tokendata.data;//设置成全局变量 pm.globals.set("webToken", token); 2、固定参数设置

RocketMQ —消息存储和清理机制

本文为您介绍 Apache RocketMQ 中消息的存储机制&#xff0c;包括消息的存储粒度、判断依据及后续处理策略等。 背景信息​ 参考 Apache RocketMQ 中队列的定义&#xff0c;消息按照达到服务器的先后顺序被存储到队列中&#xff0c;理论上每个队列都支持无限存储。 但是在实…

87、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->List相关命令

本次讲解要点&#xff1a; List相关命令&#xff1a;是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe redi…

电压信号拉线位移编码器有何突出的特点

电压信号拉线位移编码器有何突出的特点 电压信号拉线位移编码器原理简单&#xff0c;外观工艺做工精细&#xff0c;由铝合金精心打造、坚固耐磨&#xff1b;适合空间较小的环境安装。该产品重复精度达到0.01%&#xff1b;工作电压上可选择5V或5-24V供电&#xff0c;保护功能上具…

博客摘录「 MPLS/LDP原理介绍+报文分析+配置示例」2023年9月26日

//首先发送UDP Hello组播包进行发现&#xff1b;随后TCP三次握手开始建立Session&#xff0c;Active端和Passive端互相初始化和Keepalive保活确认&#xff1b;完成之后可开始进行标签交互。 //首先发送UDP Hello组播包进行发现&#xff1b;随后TCP三次握手开始建立Session&…

2023-9-26 JZ23 链表中环的入口结点

题目链接&#xff1a;链表中环的入口结点 import java.util.*; /*public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} } */ public class Solution {public ListNode EntryNodeOfLoop(ListNode head) {if(head null || head.next null …

MTK6765/MT6765联发科4G安卓核心板安兔兔跑分

Mediatek Helio P35 MTK6765是智能手机的主流ARM SoC。它在两个集群中集成了8个ARM Cortex-A53内核(big.LITTLE)。四个性能内核的频率高达2.3 GHz。 集成显卡为PowerVR GE8320&#xff0c;频率高达680 MHz。 集成内存控制器支持1500 MHz或933 MHz LPDDR3的LPDDR4x。 MT6765处理…

澜渟:长期主义才能成就专研企业

企业的增长模式有三种&#xff1a;第一种是全局增长&#xff0c;即“水大鱼大”式的、更多依靠外界环境的增长&#xff1b;第二种是结构性增长&#xff0c;即找准赛道&#xff0c;随着产业、行业的增长而增长&#xff1b;第三种是内生性增长&#xff0c;即通过内部创新实现增长…

tp6 + swagger 配置文档接口

ThinkPHP 6.0 运行环境要求PHP7.2&#xff0c;兼容PHP8.1 安装 composer create-project topthink/think tp 6.0.*如果需要更新框架使用 composer update topthink/framework文档 完全开发手册 swagger 文档 注解文档 安装包 composer require zircote/swagger-php 引用…

迅为龙芯3A5000_7A2000运行国产Loongnix、银河麒麟、统信UOS以及实时系统翼辉SylixoS系统

iTOP-3A5000开发板采用全国产龙芯3A500处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上&#xff0c;频率提升至2.5GHZ&#xff0c;功耗降低…

Vue+Three.js实现三维管道可视化及流动模拟续集

继上一篇文章中实现了三维管道的可视化和流动模拟,经过反馈,对大家还是有一定帮助,因此就编写了一个续集,相当于增加了一些常见的通用共性功能,主要在前面的基础上增加了以下功能:1.新增直角拐弯的管道,工业中很多管道都是横平竖直的,相当于我们装修的水管或电线等,不…

龙芯2K1000核心板在智能座舱行业产品方案-迅为电子

迅为2K1000核心板是一款高性能的处理器&#xff0c;适用于智能座舱行业。它具备多核CPU、高级图像处理和丰富的接口选项&#xff0c;可用于开发先进的智能座舱解决方案&#xff0c;提高乘坐体验、安全性和便捷性。以下是2K1000处理器在智能座舱行业中的产品方案。 高清晰度显…

跨网传输文件时,如何通过日志记录来审计追溯?

跨网文件传输也就是内外网文件传输&#xff0c;一直是企业最基本的传输需求&#xff0c;无论是内部的业务数据、技术文档、合同报告&#xff0c;还是外部的客户资料、合作方案、市场分析&#xff0c;都需要通过不同的网络进行安全高效的传输。然而&#xff0c;跨网传输文件也存…

curl 接口调用工具

后端接口开发完成&#xff0c;你还在为等待前端而无法调试吗&#xff1f; 今天分享一个小工具&#xff0c;curl&#xff0c;一个命令行文件传输工具。可用于大家平常开发的接口调用测试。 它支持文件的上传和下载&#xff0c;支持包括HTTP、HTTPS、ftp等众多协议&#xff0c;…

vue3+eleement plus日历选择季度

<template><div class"el-quarter-wrap"><el-popover width"280" v-model"visible"><template #reference><el-input v-model"quarterDate" placeholder"请选择季度" clearable :prefix-icon&qu…

【Vue.js】使用ElementUI搭建动态树数据表格与分页

一&#xff0c;动态树 本文章为上一篇文章拓展内容》》实现首页导航及左侧菜单 将左侧菜单结构更换为下面代码&#xff1a; 菜单结构&#xff1a; <el-menu><el-submenu index"" key""><template slot"title"><i class…

EOCR-I3M420/I3M420电动机保护器4-20mA输出的设置方法

此文章由上海韩施电气自动化设备有限公司提供 EOCR-I3M420/IFM420是施耐德韩国公司生产的一款具备4-20mA电流输出功能的电动机保护器&#xff0c;它同时还具备过载、欠载、堵转、失速、逆相、缺相和三相不平衡等电流保护功能&#xff0c;以其测量精度高、功能全面、占用空间小…

获得1688商品详情(关键词搜索,店铺所有商品)API接口返回值说明

1688API接口&#xff0c;简单而言&#xff0c;就是一套工具&#xff0c;可以帮助你与1688平台的数据与功能进行智能对接。它能够让你的店铺信息、商品信息、用户数据等信息实现高效流通&#xff0c;帮助你更好地理解客户需求 我们深知数据安全的重要性&#xff0c;因此&#x…

4项简化IT服务台任务的ChatGPT功能

近几个月&#xff0c;随着人工智能聊天机器人 ChatGPT 风靡全球&#xff0c;用户可以通过它生成脚本、文章、运动计划表等。同时&#xff0c;这项技术在各行各业都能够进行无穷无尽的应用&#xff0c;在本文中&#xff0c;我们将探讨这项现代技术如何帮助ITSM团队提升服务交付和…