当前位置: 首页 > news >正文

C++11回顾学习(1): 语法简要回顾和通俗解释

RobotSlamApplication: C++语法简要回顾和通俗解释

背景介绍: 最近在从头到尾写一个vSLAM的小型系统,已经写了大半,完成VO和Mapping的编写,现在在努力学习和编写回环检测和后端优化部分,这些都是编写代码中遇到的问题,现在先列出来记录一下。

一. 函数重载

  1. C++允许多个函数拥有相同的名字,只要参数列表不同就可以,这就是函数重载.
  2. 参数列表: 包括参数的类型、参数的个数和参数的顺序,只要一个不同就是不同.

二. 内联函数

  1. 前提: 函数的调用是有时间和空间开销.
  2. 为了减少开销,将"短小"的函数体声明为内联函数,并在函数定义处添加inline关键字.
  3. 在函数的声明处添加inline关键字无效.

三. 类与对象

  1. 类只是一种复杂数据类型的声明,不占内存;对象是类的实例化后的变量,占用内存.

  2. 在定义类时不能对成员变量进行初始化,因为没有地方存储数据.

  3. 通过对象名字访问成员使用点号.,通过对象指针访问成员使用箭头->.

  4. 在类体内定义的函数自动成为内联函数,而这种内联一般不是我们所期望的,所以实际开发中一般在类体内声明,而在类体外部定义.

  5. 一个类必须有构造函数,可以多个。构造函数常用来初始化,变量赋值或打开文件等.

四.智能指针(shared_ptr)

  1. 定义一个类的共享指针,则该指针就可以自由访问该类的所有方法和成员变量,并且在调用完毕之后自动释放内存.
  2. typedef std::shared_ptr Ptr; ## 定义了一个指向某个类的共享指针,则该指针可以访问该类的所有成员变量和成员函数.
  3. Classname::Ptr sp1 (new Classname); ## 初始化指针

五、继承与派生

  1. C++中继承与派生是一个概念:“继承” – 是儿子接受父亲的产业; “派生” – 是父亲把产业传承给儿子.
    被继承的类称为"父类 或 基类", 继承的类称为"子类 或 派生类".
    常使用的名称为: 基类 (父类)和 派生类 (子类)

  2. 派生类除了拥有基类的成员,还可以定义自己新的成员,所以"继承"的使用场景多为:相同的成员函数和成员变量被多个类使用时.

	"派生继承示例:"
		#include<iostream>
		using namespace std;

		//基类 People
		class People{
		public:
		    void setname(char *name);
		    void setage(int age);
		    char *getname();
		    int getage();
		private:
		    char *m_name;
		    int m_age;
		};
		void People::setname(char *name){ m_name = name; }
		void People::setage(int age){ m_age = age; }
		char* People::getname(){ return m_name; }
		int People::getage(){ return m_age;}

		//派生类 Student
		class Student: public People{
		public:
		    void setscore(float score);
		    float getscore();
		private:
		    float m_score;
		};
		void Student::setscore(float score){ m_score = score; }
		float Student::getscore(){ return m_score; }

		int main(){
		    Student stu;
		    stu.setname("小明");
		    stu.setage(16);
		    stu.setscore(95.5f);
		    cout<<stu.getname()<<"的年龄是 "<<stu.getage()<<",成绩是 "<<stu.getscore()<<endl;

		    return 0;
		}

附加备注1:public-protected-privated 三个关键字的权限:

1). public、protected、private 三个关键字除了可以修饰类的成员,还可以指定继承方式;
2). public 可以成员可以通过对象来访问, protected 和 private 不能通过对象访问,可以通过成员变量访问;

附加备注2:关于三者的继承方式在派生类中的"使用"权限:(记住以下4点就OK)

1). 继承方式中的public、protect、provate代表了基类成员在派生类中的最高访问权限, 也就是说, public继承则派生类对基类中的不同访问权限的成员(三个关键字不同的访问权限)具有一样的访问权限.
2). 在任何继承方式中,private权限的函数都不能在派生类中调用.
3). 由于多种继承方式较为复杂,一般在实际开发中使用public继承。
4). 若在派生类中改变基类成员变量或成员函数的权限,可以用"using"关键字.

 	"在派生类中修改基类函数的权限:紧接上一个例子"
	 //派生类Student2
	class Student2 : public People {
	public:
	    void learning();
	public:
	    using People::m_name;  	//将protected改为public
	    using People::m_age;  	//将protected改为public
	    float m_score;
	private:
	    using People::show;  	//将public改为private
	};

相关文章:

  • 菜鸟专学:从头到尾创建自己的SLAM系统
  • 菜鸟专学:Eigen--Sophus--CV--三种不同库对矩阵的操作方式
  • ROS回顾学习(7):ubuntu下设置(ROS)程序开机自启动
  • RTAB-Map学习和测试详解
  • ROS回顾学习(8): 项目研究中遇到问题和难点记录
  • 菜鸟专学:明确自己编程习惯的变量命名法
  • OpenCV第一讲: 常规函数和类的使用 -- HighGui Core模块
  • kinect V2 驱动安装说明
  • C++11回顾学习(2): 一些常用的函数和小技巧
  • ROS回顾学习(9): 单通道深度图像转化为彩色图发布
  • C++11回顾学习(3): CPU多核与多线程、并行与并发
  • OpenCV第二讲:图像滤波及几何变换
  • OpenCV第三讲: 方框滤波、均值滤波、高斯滤波
  • 机器学习第一课:基础概念扫盲
  • 机器学习第二课:神经网络结构和专业术语
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Create React App 使用
  • HTML5新特性总结
  • Java|序列化异常StreamCorruptedException的解决方法
  • javascript 哈希表
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​Linux·i2c驱动架构​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #Java第九次作业--输入输出流和文件操作
  • (03)光刻——半导体电路的绘制
  • (4) PIVOT 和 UPIVOT 的使用
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (独孤九剑)--文件系统
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)UDP基本编程步骤
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)memcache、redis缓存
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NetCore 如何动态路由
  • .NET建议使用的大小写命名原则
  • .net解析传过来的xml_DOM4J解析XML文件
  • 。Net下Windows服务程序开发疑惑
  • @Data注解的作用
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @我的前任是个极品 微博分析
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [1525]字符统计2 (哈希)SDUT