1安装目录和工程目录需要是英文
2工程新建的三种方式:文件新建,编辑里右键打开新建文件或者newproject。
3只学习C语言的模板选择非qt项目及即Non-qtproject,plain c application。c++则是plain cpp application然后选择工程目录。编译器选择kits+desktop MinGW32bit。,若打开别人的qt文件,先删除别人项目下的user文件。
4.运行可以左下角的一键编译加运行,也可以win加R。
2cpp的初识 1.cpp的编程思想:面向对象和泛型编程 2第一个cpp程序头文件iostream
using namespace std;//cout cin依赖此语句
cout代表终端输出设备,以拼接的形式显示结果。
endl换行
cin代表终端输入设备形式:cin》num;用num变量来接输入的变量。
3.面向过程和面向对象1.面向过程:程序=数据结构+算法
数据结构:存储数据的结构(C语言的类型和数据结构)
算法:对数据的操作步骤(查找,排序)
1> 强调做算法
2> 大程序被分隔成很多小程序,这些小程序被称为函数
3> 数据开放特点(封装性差)
2.面向对象(oop即object-Orientented programming )
1>面向对象按照类来分隔组织程序,每个类都有特定的属性和方法,使得软件就像搭积木一样,更加容易组织
2>维护代码的更少修改
3.c++的三大特性:封装,继承,多态封装:把客观的事物封装成类,并且类中实现自己的数据和方法,对于不可信的进行信息隐藏。
数据:成员数据 方法:成员函数
用户只能通过方法操作自身的数据
继承:类和类之间的关系(一类对象继承另外一类对象的特征和能力),省去了重复开发的时间
多态:同一个接口,不同的功能,也称为多种形态
3c++对c的扩展 1.作用域运算符::函数内部有与全局变量同名的局部变量,访问局部变量方式同此,但可通过::访问全局变量。
#include//标准输入输出流 using namespace std; int num = 100; void test1() { //printf("num = %dn",num); cout<<"num = "< 2.命名空间namespace 目的:为了解决合作开发或者不同代码端之间的命令冲突问题,c++因此引入命名空间的概念
namespace A{...(各种类型和函数定义)}
A为命名空间名
1.命名空间只能在全局范围内定义(不能在函数内部定义)
2.命名空间可以嵌套命名空间(定义时)(不视为局部定义即不与2矛盾)(引用时用::来指明命名空间)
注:嵌套的命名空间成员需要嵌套引用(即嵌套引用::)
3.命名空间是开放的, 即可以随时把新的成员加入已有的命名空间中(加入的方式同定义)
4.声明和实现可以分离(在命名空间中声明,在外界定义,但在定义时要加作用限定符::)
5using声明可用:
一个函数中如果已经对某个命名空间的成员通过using 标识,后方就可不使用::来引用这个成员,但后方不可以重新定义同名变量,会引起二义性错误。 另外也不能再对其它不同命名空间的 同名成员进行标识,但可以标识不同命名空间的其他的成员。using A:num;
如果想在某块代码某个using修饰整个命名空间,可用using namespace A来声明整个命名空间;此时直接使用A中的变量可以不通过::,也可以自定义变量(可重名)不会报错
(//检索顺序是先当前普通变量,然后查看命名空间。也就是==就近原则)
6无名命名空间(namespace{})
意味着所有此命名空间的内容仅能在当前文件内使用,即==static修饰。
7命名空间别名(=实现)
例:namesapce dwjwqfwdjwqj{int a}
在其他处可以用a重命名 namesapce a = dwjwqfwdjwqj;
随后即可用a使用 dwjwqfwdjwqj
8.using声明碰到函数重载
如果命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集合,调用时依然通过形参来区分。
3.全局变量增强在c语言中 int a =10;//在c语言中当成定义 int a;//没有赋值当成声明 在c++中会报错,要想声明需要加extern4.c++中所有变量和函数都需要有类型。(类型增强)C语言定义函数时,所需要传入参数可以不写类型(调用时系统一次指定),不写参数则可以调用时传任何参数。
c++中传入参数必须指明类型,不写参数调用时不可以传实参会报错
5.更严格的类型转换例1:cpp中不允许不同变量的之直接赋值。
例2:c语言中枚举变量可以赋值无意义的值(即不在列举范围的值)
而cpp中直接报错。
6.结构体struct增强1cpp中使用结构体类型时可以不用struct关键字,而直接使用类型名定义变量
即
struct stu{}; stu lucy;2.c++中结构体成员可以是函数(并且结构体成员是默认共有的即外界可访问的)
7.bool类型c++支持bool类型,可以赋值为true,或者false,占一个字节
使用时可以直接bool定义变量赋值为true(1)或者false(0)。也可以赋其他值,非零值自动转为true,o值为false。
8register 关键词作用:被register关键词声明的对象直接放在寄存器,大大提升了变量的访问速率
C语言中:register关键词修饰的变量不可以用&操作符取地址
c++中:可以对一个寄存器变量取地址,register关键词变为无效,会被强制放入内存中存储
9.三目运算符(a > b)?a:bc语言:三目运算符返回的是一个常量数值
c++:返回的是一个变量,是a或者b的变量名,也就是说可以当成被判断后的变量使用。
#include10.c/c++中 constusing namespace std; int main(int argc, char const *argv[]) { int a = 1,b = 2; int num = (a > b)?a:b; (a > b)?a:b = 100; //C语言中,返回的是一个数值,c++中,返回的是一个变量 return 0; } c语言:const修饰的是只读变量,但是可以通过地址来修改其值。
c++:是一个真正的常量,不可以通过地址或者变量来修改其值,因为其存放在符号表中,也就是说,不能对其取地址,但是当对const修饰的变量取地址的话, 系统会为其分配一定内存空间,并且用常量来填充。 const int a = 1;
例1:
const int a = 1; //c++; int *p = (int *)&a; //对const修饰的常量取地址,编译器会分配一个整形的长度,并且把数字1填写到对应的内存中 *p = 2; cout<<"a = "<例2:如果以普通变量初始化const,会立即开辟空间(就不会有符号常量表)
int b=10; const int a = b;此时按照一的方式则都是输出2.即用法同c语言
例3.const修饰全局变量,如果用常量初始化,则a被分配到文字常量区。
extern引用也不可以都是严格意义上的只读。
例4.const如果修饰的是自定义数据类型(结构体枚举等)的变量 直接开辟空间
例5.尽量以const替换#define定义常量(便于调试bug)
const有类型,编译时进行安全检查
const有作用域,而define不重视作用域,默认到本文件结束。
define宏不属于命名空间,即使可以定义,不可以用::引用。



