Android之NDK开发(三)C++初识

一、C++介绍

C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言[1] 。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。它支持过程化程序设计,数据抽象,面向对象设计,制作图标等多种程序设计风格。最新正式标准C++11于2011年8月12日公布。

C++与C的关系
C语言是C++的基础,C++和C语言在很多方面是兼容的。C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。

C++对C的“增强”,表现在六个方面:

(1) 类型检查更为严格
(2) 增加了面向对象的机制
(3) 增加了泛型编程的机制(Template)
(4) 增加了异常处理
(5) 增加了运算符重载
(6) 增加了标准模板库(STL)

二、输入输出

std::cout  << i <<  std::endl;
std::cin  >> i
预处理打印宏
 #define P(X)  cout << #X << “: ” << X << endl;
 #作用获得任何一个表达式并转成一个字符数组

三、文件的输出

为了打开文件进行读写操作,必须包含<fstream>
为了读而打开文件,要创建一个ifstream对象,用法与cin相同
为了写而打开文件,要创建一个ofstream对象,用法与cout相同
iostream库中,一个非常有用的函数getline(),把一行读入到string对象中
(以换行符结束),getline(ifstream in, string str );

四、构造函数和析构函数

在C++里面可以用结构体作为类来使用
构造函数和析构函数是在类体中说明的两种特殊的成员函数
构造函数是在创建对象时,使用给定的值来将对象初始化
析构函数的功能正好相反,是在系统释放对象前,对对象做一些善后工作

构造函数:
若没有定义类的构造函数,则编译器自动产生一个缺省的构造函数;
若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为缺省的构造函数,缺省的构造函数只能有一个;
A(float a=10,float b=20){ x=a; y=b;} A(){ } 均为缺省的构造函数

构造函数与new运算符 ,用new动态开辟空间
最后返回这个动态对象的起始地址;
用new运算符产生的动态对象,在不再使用这种对象时,必须用delete运算符来释放对象所占用的存储空间;
用new建立类的对象时,可以使用参数初始化动态空间

析构函数 :
析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为 对象所分配的空间,即要撤消一个对象 ~Person() {}
析构函数的特点:
1>.析构函数是一个特殊的成员函数,函数名必须与类名相同,并在其前面加上 字符“~”,以便和构造函数名相区别;
2>.析构函数不能带有任何参数,不能有返回值,不指定函数类型;
3>.一个类中,只能定义一个析构函数,析构函数不允许重载;
4>.析构函数是在撤消对象时由系统自动调用的;
在程序的执行过程中,当遇到某一对象的生存期结束时,系统自动调用析构函数,然后再收回为对象分配的存储空间
在程序的执行过程中,对象如果用new运算符开辟了空间,则在类中应该定义一个析构函数,并在析构函数中使用delete删除由new分配的内存空间。因为在撤消对象时,系统自动收回为对象所分配的存储空间,而不能自动收回由new分配的动态存储空间。

五、访问和控制类

访问控制通常是指实现细节的隐藏,将函数包含到一个结构体内(常成为封装)来产生一种带数据和操作的数据类型,由访问控制在该数据类型之内确定边界
C ++ 的类class 和struct 每个方面都是一样的,除了class 中的成员默认为private, 而struct 中的成员默认为public

六、内联函数

nline 说明这个函数是内联的,在编译过程中内联函数会直接被源代码替换,提高执行效率 如果类中的某个函数会被调用很多次或者放在循环中,那么建议将这个函数声明为内联,可以提高程序的运行效率

记住,调用函数的开销是很大的,所谓的空间开销是指调用函数前,先要将原来的函数保存在寄存器(占用寄存器空间)里面,并在调用结束后恢复。调用函数时,还要复制实参(占用内存空间)。如果被调用函数一旦调用频繁,就会花费很多空间。如果你有一段“短小而频繁调用的函数”,内联是个不错的选择。

七、虚函数

虚函数是C++的精华,也是java多态的前身。virtual虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值