C++和QT

一、从C语言到C++(面向对象的语言)

面向过程的语言,是以“怎么解决问题”为核心。关注的重点是“算法”,算法可以被理解为一系列有序的步骤,按照步骤一步一步来做,得到预计的效果。面向过程的语言编写接近于计算机执行命令的方式,优点是程序的执行效率极高,但是开发效率低。

面向对象的语言,是以“谁来解决问题”为核心。关注的重点是“对象”,对象可以被认为是一系列由于某种联系聚焦在一起的数据,面向对象的语言要处理的就是对象和对象之间的关系,这种方式更接近与人类社会的社交方式,其优点程序的开发效率高,但是执行效率低。
  1. C++和JAVA

C语言

JAVA

C++不易上手、需要在熟悉C语言的基础之上学习。

C++可以直接操纵内存。

C++程序运行效率极快。

C++语言接近底层,与嵌入式和硬件打交道的地方多。

Java易上手、编程环境简单。

Java运行在虚拟机上,拥有极强的跨平台的能力。

避免了内存泄漏等问题(因为在虚拟机里,无视了内存管理和回收)。

  1. 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

  1. C++运算符

  1. new可以初始化

  1. new会调用构造函数,delete前会调用析构函数

  1. new通过捕捉异常判断分配是否

  1. C库函数

  1. malloc不可以

  1. malloc通过判断是否为空指针判断申请空间是否成功

  • string

string实际上不是C++基本数据类型,实际上string是一个C++标准库中的字符串类,使用时要引入头文件#include<string>

绝大部分情况下string都可以代替char*,不必担心内存是否足够、字符串长度等问题,string类内部集成了大量的字符串操作函数可以满足字符串处理的需要

string类的遍历支持传统(C语言)的循环(for、while)

关于String相关使用,个人推荐去这个博客里学习

(29条消息) QT中QString的用法总结_疯狂的挖掘机的博客-CSDN博客_qt qstring

二、C++函数

  1. 内联函数

  1. 函数重载

  1. 函数参数的默认值(缺省值)

  1. 哑元函数

三、面向对象

  1. 类与对象

  1. 封装

四、类的默认函数

  1. 构造函数

  1. 构造初始化列表

  1. 析构函数

  1. 拷贝构造函数

  1. explicit关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值