C++特点:
1. 在支持C语言的基础上,全面支持了面向对象的开发
2. 编程领域广泛,且功能强大
3. 为数不多的支持底层操作的面向对象语言
4. 在面向对象的编程语言中执行效率极高
面向过程和面向对象
面向过程的语言,关注的重点是‘算法’,这种思考方式更加接近于计算机的思考方式,优点是可以把控到每个细节,因此程序的执行效率高,同时也带来了开发效率低的缺点。
面向对象的语言,关注的重点是‘对象’,编程人员只需要站在更高层次去管理这些单元体,更加接近人类的思考方式,优点是开发效率高,但是执行效率低。
面向过程,是以“怎么解决问题”为核心
面向对象,是以“谁来解决问题”为核心
引用
理论
概念
引用与指针类似,但是使用更加简便,功能更加简单,可以认为引用是一个变量的“别名”,对引用的操作与直接操作变量完全相同
性质
1. 可以改变引用的变量值,但是不能再次成为其他变量的引用
2. 声明引用时,必须对即将声明的引用进行初始化操作
3. 声明引用时,初始化的值不能为空
4. 声明引用时,初始化的值如果是纯数值,需要给引用增加const关键字进行修饰,表示该引用是常引用,这样的引用不能改变其数值
5. 可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量
6. 可以对指针建立引用
7. 可以使用const对引用进行修饰,此时虽然不能直接改变信用的值,但是可以简介改变原变量的值
引用参数
1. 引用参数可以使参数传递的效率提高,原因是不会产生副本
2. 引用参数应该在能被定义为const的情况下,尽量定义const,以达到引用的安全性
实践
void add(int &num)//引用位于形式参数
{
num++;
}
int main()
{
int num=0;
add(num);//实际参数传入函数的样式不受影响
cout<<"num = "<<num<<endl;//输出num的结果受函数影响
/**
输出结果:num = 1
*/
return 0;
}
字符串类型
理论
概念
string是c++内置的字符串类,因为使用方式与基本数据类型极为相似,因此很多小白会误以为string是c++中的基本数据类型,不要混淆,string类型的头文件为#include<string>
其次,string使用ASCII编码,只支持英文字符,不能使用中文字符
string内部集成了大量的字符串处理函数,在下面的实践中,将对重点的函数进行举例
实践
int main()
{
string my_name="love Dog";//对字符串进行赋值操作
for(char c:my_name)//逐行遍历string字符串
{
cout<<c;
}
cout<<endl;
/**
输出结果:love Dog
*/
cout<<my_name[3]<<endl;
cout<<my_name.at(3)<<endl;//注意:这两行的效果都是获取下标为3的数据
//二者区别:前者取出元素效率更高,后者更为安全
/**
输出结果:e
e
* /
return 0;
}
函数
内联函数
理论
内联函数的目的是取代宏定义函数,使用关键字inline放在函数定义的前面,可以将函数定制为内联函数
内联函数在编译时,会直接展开该函数体到主函数中进行编译,因此可以提升程序运行的效率,一般可以将长度较小,且不包含复杂控制语句的频繁调用函数声明为内联函数
注意:所有的成员函数默认为内联函数,无需手动使用inline进行修饰。
实践
//由于内联函数和普通函数区别不大,这里就不做完整演示了
online int add(int num)//这便是内联函数
{
;
}
函数重载
理论
C++允许使用同一个函数名称定义多个函数,这就是函数重载,函数重载的前提是各个重载的函数之间参数不同(类型或者个数),与返回值无关
注意:除了上述普通函数支持重载之外,成员函数和构造函数等也支持函数重载,但是析构函数不支持函数重载
实践
void add(int &num)
{
num++;
}
void add(int &num01,const int &num02)//函数进行重载操作
{
num01+=num02;
}
int main()
{
int num01=1;
int num02=3;
add(num01);
cout<<"num01 = "<<num01<<endl;
add(num01,num02);
cout<<"num01 = "<<num01<<endl;
/**
输出结果:num01 = 2
num01 = 5
*/
return 0;
}
参数默认值
理论
C++中允许给函数的参数设定默认值,在调用函数是,如果传入参数,则传入的参数会覆盖默认值,如果不传入参数,则使用默认值作为参数值
注意:向右原则,如果函数参数有多个,此时给某个参数设定了默认值后,其右边所有的参数都必须设定为默认值
当函数的参数默认值与函数重载同时使用时,非常容易导致二义性问题,二义性问题是指编译器无法做出两种情况的抉择,因此尽量不要同时使用函数重载和默认值
实践
int add(int num=0)//函数进行默认初始化操作
{
num++;
return num;
}
int main()
{
int num01=1;
cout<<"add = "<<add()<<endl;
cout<<"add = "<<add(num01)<<endl;
/**
输出结果:add = 1
add = 2
*/
return 0;
}
哑元函数
理论
如果一个函数的参数只有类型,没有名字,这个参数在函数体重无法使用,这样的参数被称为哑元,这样的函数被称为哑元函数
作用:
1. 区分重载函数
2. 保持函数的向前兼容性