一、从C语言到C++(面向对象的语言)
面向过程的语言,是以“怎么解决问题”为核心。关注的重点是“算法”,算法可以被理解为一系列有序的步骤,按照步骤一步一步来做,得到预计的效果。面向过程的语言编写接近于计算机执行命令的方式,优点是程序的执行效率极高,但是开发效率低。
面向对象的语言,是以“谁来解决问题”为核心。关注的重点是“对象”,对象可以被认为是一系列由于某种联系聚焦在一起的数据,面向对象的语言要处理的就是对象和对象之间的关系,这种方式更接近与人类社会的社交方式,其优点程序的开发效率高,但是执行效率低。
C++和JAVA
C语言 | JAVA |
C++不易上手、需要在熟悉C语言的基础之上学习。 C++可以直接操纵内存。 C++程序运行效率极快。 C++语言接近底层,与嵌入式和硬件打交道的地方多。 | Java易上手、编程环境简单。 Java运行在虚拟机上,拥有极强的跨平台的能力。 避免了内存泄漏等问题(因为在虚拟机里,无视了内存管理和回收)。 |
C++的更进
bool类型(布尔类型)
bool类型一种C语言里就有类似定义,到C++里正式作为一个基本数据类型出现,其可以被赋予成字符true或false,其中true对应的是真,false对应的是假。可以用来判断条件的真假。(bool可以作为函数的返回值)
关键字namespace(命名空间)和using
namespace:多文件编程时经常会出现在一个作用域中出现多个重名变量,可以通过创建命名空间(namespace)来避免冲突。使用时需要在前面加“命名空间的名字::变量名”。
using声明:在此作用域内使指定的标识符可用
using namespace::Wang//可以直接使用命名空间Wang内的所有成员
using Wang::name//可以直接使用命名空间Wang内的name成员
使用命名空间的注意事项:
1)只能在全局空间创建命名空间。
2)不仅仅是变量,函数也可以加入命名空间。
cin和cout
cin:输入;cout:输出;
相比于C语言的scanf()和printf()更加直接简便
头文件:cin/cout:#include<iostream.h>
printf/scanf:#include<stdio.h>
int num1=0,num2=0;
cin>>num1>>num2;///给num1和num2赋值,num1=1,num2=2
cout<<num1<<"+"<<num2<<"="num1+num2;//输出结果: 1+2=3
新定义——引用
引用的功能和指针类似,但是引用和指针有很大的区别。可以理解为引用是给一个变量取别名。
引用(数据类型+&+引用名称=被引用的变量) | 指针(数据类型+*+指针名称=被指向的变量的地址) |
1)声明引用时必须初始化。 2)声明引用时必须保持数据类型一致。 3)&符号只在声明引用时使用,之后再使用的话其作用依然是取地址,直接使用引用名即可。 4)引用初始化完毕后,不可以再更改。 5)不可以定义引用的引用。 6)不可以引用NULL。 | 1)声明时可以初始化。 2)*p是指向地址上存储的数值,p是指向的地址 4)指针初始化完毕后,可以指向一个新的地址。 5)指针可以指向指针。 )可以指向NULL。 |
1、引用数值常量时,前面加个const关键字(不可改变常引用的值)
2、可以引用指针,并不会改变指针指向的内容和地址,相当于给指针取别名
引用作为函数的参数只需要传其本身就可以了,在c语言中我们交换两个数的值往往使用指针传参,在C++中还可以使用引用传参
funSwap1(&a,&b);//主函数中函数的使用
void funSwap1(int *x,int *y)
{
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
}//指针传参
funSwap1(a,b);//主函数中函数的使用,
void funSwap2(int &x,int &y)
{
x=x+y;
y=x-y;
x=x-y;
}//引用传参肉眼可见的整洁方便,并且没有产生多余的参数,更没有直接访问内存,增加了程序的安全性
如果不希望参数在函数中被修改,可以在参数里面加const
引用可以作为函数的返回值,但不可以返回局部变量的引用,归根到底引用还是读取的时引用对象的地址,在函数结束之后,局部变量占据的空间被释放,传会的值会发生错误。
C++类型转换
C++中尽量使用C++的类型转换
int a=0;
double b=(double)a;//C语言的变量转换
int x=0;
double y=static_cast<doubble>(x);//C++的类型转换
C++的强制转换更加安全
new/delete
C语言中动态分配和释放内存使用malloc()和free()函数
C++中新增了两个关键字,new(分配内存)和delete(销毁内存)
int* pint=new int;//也可以使用int* pint=new int(123);分配空间的同时进行初始化
delete pint;
如果需要分配一组连续的数据,可以使用new[],销毁时必须相对应的使用delete[],如果 不加不会销毁干净(销毁第一个)。
int *pint_array = new int[5];//分配了5个int空间也可以在分配的同时初始化int *pint_array = new int[5]{1,2,3,4,5};
pint_array++;//这里++并不会将数值+1,而是在空间上往后加一个空间
delete[] pint_array;//如果不加[],将指挥销毁分配的第一个空间
new/delete 与 malloc/free的区别
new/delete | malloc//free |
|
|
string
string实际上不是C++基本数据类型,实际上string是一个C++标准库中的字符串类,使用时要引入头文件#include<string>
绝大部分情况下string都可以代替char*,不必担心内存是否足够、字符串长度等问题,string类内部集成了大量的字符串操作函数可以满足字符串处理的需要
string类的遍历支持传统(C语言)的循环(for、while)
关于String相关使用,个人推荐去这个博客里学习
(29条消息) QT中QString的用法总结_疯狂的挖掘机的博客-CSDN博客_qt qstring
二、C++函数
内联函数
函数重载
函数参数的默认值(缺省值)
哑元函数
三、面向对象
类与对象
封装
四、类的默认函数
构造函数
构造初始化列表
析构函数
拷贝构造函数
explicit关键字