首页 > 编程语言 >C++_运算符重载

C++_运算符重载

时间:2024-12-12 17:12:41浏览次数:5  
标签:函数 -- c++ 运算符 C++ 重载

filesystem

c++11
 在CMakeList.txt
    find_package(Boost COMPONENTS system filesystem regex REQUIRED)
    include_directories ( ${Boost_INCLUDE_DIRS})
    target_link_libraries(projectname ${Boost_LIBRARIES})
 程序 
    #include<boost/filesystem.hpp>  
    namespace bf=boost::filesystem;//简单别名
c++17	
 filesystem 源自 boost.filesystem 库,在C++17合并进C++标准库中	

C++版本

C++编译器的版本、
C++标准库的版本
命令行 :gcc  --version
   g++ -dM -E -x c++  /dev/null | grep -F __cplusplus
   ls /usr/bin/ |grep  gcc
   cpp命令是C预处理器,也可以用来查看C++版本 
    	  
查看支持的对应的C++版本   
    C++标准	__cplusplus值
    C++ 11	201103L
    C++ 14	201402L
    C++ 17	201703L
也可以指定c++标准
 Ubuntu18默认是g++7,不支持c++17标准,因此升级到g++10.

构建遇到的问题

  1.操作系统的问题 Linux  pthread的引入
  2.C++版本问题 c++17,本地版本用的时c++11  ,其中filesystem的区别	 
  3..inl 文件是什么? 可以理解为 .cpp 文件 仅一种约定的规则,表明这里这里面是一些内联函数和模板的实现
   且通常会在 .h 文件的尾部,使用 #include 包含此文件

运算符重载

 C++允许将运算符重载扩展到用户定义的类型
   封装--隐藏数据--数据私有
       严格私有--类 public 方法
	   后门:非成员函数--友元 friend   访问类私有变量 元函数看作类的扩展接口的组成部分
	      声明: 友元函数的第一步是将其原型放在类声明中, 并在原型声明前加上关键字friend
		  定义: 编写函数定义
   封装--隐藏方法--隐藏了内部机理--运算符重载
 多态:重载(编译时多态)
    编译时多态(静态多态  函数重载和函数模板,
    运行时多态(动态多态)  虚函数的重写/覆盖  子类的虚函数重写了父类的虚函数
 
 重载--例如 Overloading
  函数重载-函数重载(Function Overloading 同一个作用域内定义多个同名函数,
     但这些函数必须有不同的参数列表(即参数的类型、个数或顺序不同) 
 运算符重载:  
    操作数的数目和类型决定使用哪种加法定义
	重载定义和重载实现和重载应用 --调用对象和函数参数传递对象
	    函数表示法-- obj1.operator+(obj2)
		运算符表示法 obj1+obj2
    重载限制:不能违反运算符原来的句法规则,不能创建新运算符。
	         重载后的运算符必须至少有一个操作数是用户定义的类型
			 
			 四种只能通过成员函数进行重载。
                =: 赋值运算符。
                ( ): 函数调用运算符。
                [ ]: 下标运算符。
                ->: 通过指针访问类成员的运算符
友元:friend


常用的友元: 重载<<运算符
 运算符来说, 可以选择使用成员函数或友元函数来实现运算符重载


标准库中的重载:一个符号有多种含义的
   << 运算符是C和C++的位运算符  ostream类对该运算符进行了重载, 将其转换为一个输出工具。

构造函数

 构造函数:
    初始化具名对象 初始化自由存储上的对象 初始化临时对象
    实现显式类型转换
 对象的拷贝或者移动
    作为赋值操作的源
    作为一个对象初始化器
	作为一个函数的实参 作为一个函数返回值
    作为一个异常
	
    对象移动:并不是内存的数据移动,而是变更所有权;
    std::move():本身不移动对象,只是把对象的类型转换为右值	

CyberRT

 方式一启动
    mainboard 是 cyberRT 的入口,init 方法都在这里触发
	   // 初始化cyber框架
       apollo::cyber::Init(argv[0]);
     //ModuleContriller 		   


 ###方式二启动
  启动cyber模块 初始化cyber框架
   apollo::cyber::Init(argv[0]);/
   apollo::cyber::CreateNode ;// 创建一个节点每个Node负责创建Reader/Writer, Service/Client组件获取信息或者传达信	 
   CreateReader
   
  cyber.h 有一个 CreateNode 方法,返回的是 Node 的引用	 
    Node.h 文件 一个 Node 有一系列相关的 Reader
	    Reader
	      Reader 通过订阅 Channel 获取信息 收到信息时会触发传递到 Reader 的回调 callback
		  Reader 和 Channel 是相关联的,由 ChannelManager 进行管理。
		  Reader 会和一种 Topology 网络发生关系
		  TopologyManager  元素之间的关系 3 个子 Mannager:NodeManager、ChannelManager、ServiceManager
	    Component 的基类是 ComponentBase
		  通过 Scheduler 进行调度 Init 和 Proc 的调用是由 CyberRT Frame 驱动的
		TimerComponent 同样继承自 ComponentBase
		   Timer 的内部又有两个关键成员变量类型 TimingWheel 和 TimerTask
   init.c 	   
      scheduler
	    策略不同有 SchedulerClassic 和 SchedulerChoreography 两种
		Scheduler 会根据 Node 的名字创建一个 Task 
		scheduler 会将 node 与 CRoutine 建立联系,然后与 Processor 也建立联系

参考

 C++实战项目推荐 https://pokeai.cn/79.html

标签:函数,--,c++,运算符,C++,重载
From: https://www.cnblogs.com/ytwang/p/18602986

相关文章

  • C++ Boost库 tuple元组
    元组boost::tuple是Boost库中提供的允许程序员创建固定大小的元组,这些元组可以包含不同类型的元素。元组是一个数据结构,它可以存储多个值,这些值可以是不同类型的。boost::tuple是C++标准库中std::tuple的前身,后者在C++11标准中被引入。特点固定大小:一旦创建,boost::tuple的大小......
  • C++11 lock_guard和unique_lock
    一、RAII技术1、ResourceAcquisitionIsInitialization,资源获取即初始化,由C++之父提出。2、使用局部对象来管理资源的技术,称为资源获取即初始化。3、资源主要指操作系统中有限的东西,如内存、套接字等;局部对象指存储在栈里的对象,生命周期由操作系统来管理。4、资源......
  • Java运算符练习_模拟简单的计算器
    问题描述定义名为Number的类其中有两个整型私有成员变量n1和n2。编写构造方法赋予n1和n2初始值,并为该类定义加(add)、减(sub)、乘(mul)、除(div)等公有成员方法分别对两个成员变量执行加、减、乘、除的运算。在main方法中创建Number类的对象调用各个方法并显示计算结果。输出数据格式......
  • C++学习笔记 数组
    1.一维数组1.1数组的定义数组的定义方式和变量类似。#include<iostream>#include<algorithm>usingnamespacestd;intmain(){inta[10],b[10];floatf[33];doubled[123];charc[21];return0;}1.2数组的初始化在main函数内部,未初......
  • C++ 的发展
    目录​编辑C++的发展总结:​编辑1. C++的早期发展(1979-1985)2. C++标准化过程(1985-1998)3. C++标准演化(2003-2011)4. C++11(2011年)5. C++14(2014年)6. C++17(2017年)7. C++20(2020年)8. C++23(2023年)1. C++1985:C++1.0主要特性:示例代码:代码讲解:C++1.0的局......
  • 在CodeBolcks+wxWidgets+wxSmith下的C++编程教程——用向导创建一个wxWidgets项目(sTet
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • 23. C++STL 9 (priority_queue的使用和适配实现详解)
    ⭐本篇重点:1priority_queue的使用与底层原理2使用容器来适配priority_queue⭐本篇代码:c++学习·橘子真甜/c++-learning-of-yzc-码云-开源中国(gitee.com)⭐标⭐是比较重要的部分目录一.priority_queue(优先级队列)的使用与原理1.1priority_queue的底层原理......
  • c++ CMakeLists.txt详解
    基本结构CMake最低版本声明用于指定需要的最低CMake版本,确保兼容性。cmake_minimum_required(VERSION3.10)指定CMake的最低版本。确保用户的CMake版本符合项目需求,否则报错。版本选择建议根据项目使用的功能决定。例如,3.10引入了target_link_directories。......
  • Shell浅浅谈(六)轻松掌握基本运算符
    Shell支持多种运算符,包括:算术运算符关系运算符布尔运算符字符串运算符文件测试运算符以下是各类运算符的详细说明和实例。一.算术运算符特点使用expr命令计算表达式。表达式和运算符之间需要空格⭐。用反引号``包裹表达式。运算符说明运算符说明示例+加法expr......
  • 【2024年华为秋招-12月11日-第二题(200分)- 服务器训练任务调度】(题目+思路+Java&C++&Py
    题目内容团队申请了一组服务器,用于机器学习训练,为了充分利用资源,需要你来完成任务调度算法的实现。一台服务器同一时间只能执行一个训练任务,每个训练任务有训练时间和优先级。当空闲服务器不足时,优先执行高优先级的训练任务;如果多个训练任务的优先级相同,优先执行训练时......