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
posted @ 2024-12-12 16:56  辰令  阅读(34)  评论(0)    收藏  举报