韦东山第4期Android视频-C++快速入门-第2课第1/2节
xsobi 2024-12-28 16:18 1 浏览
该系列文章主要整理了C++相关的知识点。对我个人而言,学习C++是为了能阅读理解Android源码里的C++代码,进而理解Android系统为什么要使用C++,并且是如何利用C++实现特定功能的。在Android实战中加深对C++的理解,边学边用,这样学习的效率才是最高的。
C++系列往期文章:
韦东山第4期Android视频-C++快速入门-第1课第1节_c++类的引入-学习笔记
参考:
《韦东山第4期教学视频-Android-C++快速入门-第2课第1节_c++基础知识_访问控制》
《韦东山第4期教学视频-Android-C++快速入门-第2课第2节_c++基础知识_程序结构》
《C++语言程序设计(第3版本)》郑莉,大学入门教材,浅显但是有些知识点解释不清楚。
代码下载:
https://github.com/wuweidong0107/cpp_projects
抽象性
什么是类和对象?
类是一类对象的模板,对象是类的具体实例,举个例子:
类通过抽象而来的,抽象是面向对象的一个重要思想。
封装性
C++中,类里的变量和函数都被称为类成员,变量被称为数据成员,函数被称为成员函数。
类成员的3种访问属性:
public: 类里类外都可以直接访问;
private: 只能被类里的成员函数访问,类外不能直接访问,但是可以借助public的成员函数间接去访问private数据成员;
protected: 如果不涉及继承,用法和private类似,但是被继承后情况就不一样的。继承分为公有继承、私有继承、保护继承,不同的继承方式对protected修饰的成员的影响不一样。目前不需要太深入了解,等后面学习到继承的概念后再展开说明。示例代码:
this指向调用函数的当前对象。
什么是封装性?
通过上述3种访问属性,将类的内部实现封装起来。简单的形容就是"不要告诉我你是怎么做这个工具的,只要你教会我怎么用这个工具就行了",封装的优点如下:
- 将变化隔离
- 便于使用
- 提高重用性
- 提高安全性
类的概念只是封装的其中一个表现而已,包/组件/框架等也符合封装的思想。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
点击这里找小助理0元领取:加微信领取资料
程序结构
内联函数
C++中,如果成员函数是在类的实现的,这个函数被称为内联函数,内联函数的函数体会在编译时被插入到每一个调用它的地方,这样会提高运行效率,但是是增加空间开销,只有简单的成员函数才适合声明为内联函数。
内联函数有2种声明方法:隐式声明和显式声明。
隐式声明是函数体直接放在类内,如下:
显式声明,效果和隐式声明一样:
在类外实现成员函数
类里一般只定义成员函数,而将函数的实现放在类外面,如下:
类有封装的特点,所以对于类的的调用者来说,只关心类对外提供的什么API,而不在乎这些API是怎么实现的,所以将类的定义和类的实现分别写在.h和.cpp文件里,可以让程序的结构更清晰,对调用者更友好,如下:
命名空间
一个项目通常都不会仅由一个人来开发完成,不同的人开发同一个系统,不可避免地会出现变量或函数的命名冲突,当所有人的代码各自测试没有问题后,将所有人的代码结合到一起,就有可能因为变量或函数重名而导致编译报错。
命名空间是C++提供的一种解决标识符名字冲突的方法。一个命名空间就是一个作用域,在不同名字空间中命名相同的标识符代表不同的实体。命名空间本质上就是一片被命名的内存区域,里面的东西通过空间名+标识符名的方式被调用,如下:
.h文件里的定义位于namespace里,那么.cpp文件中的实现也要保存在对应namespace里
。通过.h可以反推出.cpp里的内容,这里不再贴cpp的代码。
上面的例子中Person这个类并没有跟其他标识符冲突,每次都A::Person来创建对象太麻烦了。简化的方法是用using关键字来导入标识符:
也可以直接导入整个A空间,那么只要程序里调用的标识符跟A空间里的标识符一致,都会采用为A空间里定义的标识符,如下:
如果有人头脑发热,想要这样做:
位于std命名空间的C++标准程序库
std是standard的缩写,C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,例如:
标准库里最常用的2个标识符就是cout和cin,cout和cin是什么?
C++中数据的输入和输出是通过stream类来实现的。cout是一个ostream类的对象,它有一个成员运算符函数operator<<,运算符<<的功能被重载了,被重载成每次cout执行<<时,就会将<<后面的数据输出到标准输出中。对于cin,则是istream流类的对象,其重载了>>运算符。
参考:
http://www.cplusplus.com/reference/iostream/cout/?kw=cout
重载的概念目前理解不了是正常的,有一点基本概念就行了,重要的是会用cout和cin来输出和输入数据,如下:
格式化输出
参考:
http://www.cplusplus.com/reference/ios/hex/?kw=hex
http://www.cplusplus.com/reference/iomanip/setw/?kw=setw
下一篇的内容:重载、指针、引用。
文章链接:
https://mp.weixin.qq.com/s/D64krAXNaewZVimeEry_5Q
转载自:老吴嵌入式 ,作者可爱的东东
文章链接:韦东山第4期Android视频-C++快速入门-第2课第1/2节_c++基础知识_访问控制/程序结构-学习笔记
相关推荐
- C++中的多态(动态多态)究竟是如何实现
-
为了叙述简便,在本文中,将动态多态性一律简化为多态性。在前面的文章中,我们已经简要介绍了C++的多态性,也介绍了C++的虚函数表,下面,我们来看看C++是如何利用虚函数机制来实现多态性的。(题外话:实...
- C++面向对象开发的四大特性:封装、抽象、继承、多态
-
1、封装封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制程序对类属性的读取和修改。对于类的内部,成员函数可以自由修改成员变量,进行更精确的控制;对于类的外部,良好的封装能够减少耦合,同时隐藏实现...
- C#知识|继承与多态
-
哈喽,你好啊,我是雷工01ProtectedProtected关键字表示这个属性只能给“子类”使用,即只能在子类内部使用,不能通过子类对象去使用;02父类定义父类...
- 朝文分享(54):深入C++(二十一)——多态
-
分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。...
- C++基础语法梳理:引用、封装、继承和多态
-
本期是C++基础语法分享的第六节,今天给大家来分享一下:(1)引用;...
- 继承和多态概念及语法
-
继承是面向对象编程的重要概念之一,它指的是一个类可以从另一个类中继承属性和方法。...
- Java的多态如何实现的?
-
面向对象编程语言三大特征:继承、封装、多态。虽说是三大特征,但其实从多态的角度看,继承和封装都是为了实现多态而准备的,尤其是在一些大型优秀的框架上,多态的使用随处可见,所以说多态是一个十分重要的知识点...
- C++中的多态性
-
封装、继承、多态是C++的三大基本特性。封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);封装和继承的目的都是为了"代码重用",多态则是为了实现另一个目的:接口...
- 讲解一下Java 中的多态
-
多态(Polymorphism)属于面向对象三大特征之一,它的前提是封装形成独立体,独立体之间存在继承关系,从而产生多态机制。多态是同一个行为具有多个不同表现形式或形态的能力。重载式多态,也叫编译时多...
- java编程笔记,多态的好处和弊端
-
测试代码:1.创建Animal.java类作为父类2.创建Cat.java类作为Animal的子类3.创建一个Dog.java类作为Animal的子类4.创建Test.java测试类代码说明:多态的好...
- C/C++编程笔记:C++多态性知识详解
-
多态性一词意味着具有多种形式。简而言之,我们可以将多态定义为消息以多种形式显示的能力。一个真实的多态示例:一个人同时可以具有不同的特征。像男人一样,是父亲,丈夫,雇员。因此,同一个人在不同情况下会表现...
- 用通俗易懂的多态世界观实例:理解python类的多态
-
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态...
- 多态——制作饮品
-
classAbstractDrinking{public://煮水virtualvoidBoil(){cout<<"煮农夫山泉"<&...
- python之多态、继承、重写篇
-
#-*-coding:UTF-8-*-classAnimal:defrun(self):print("动物会跑。。")defsl...
- Java面向对象——多态
-
前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节什么是多态:一个对象具备多种...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- firebug 使用 (31)
- characterencodingfilter (33)
- getmonth (34)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android应用开发 (31)
- html转js (35)
- 索引的作用 (33)
- css3 0 (31)
- checkedlistbox (34)
- localhost 8080 (32)
- 多态 (32)