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
	};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱发呆de白菜头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值