尚德
声明数组
引用和指针
-
当* 用于声明变量或者函数的时候,意为声明该变量或者函数为一个指针
int a = 20;
int *b = &a; -
其他场景* 意为对变量取值 std::cout << *b << std::endl;
-
当 & 用在定义变量的时候表示引用变量 int & b = a;
-
当& 用作引用变量的时候,a,b将表示同一个内存地址的内容,即a,b总是一样的。 int & b = *a;
引用=别名,引用就是给一个变量起别名。
如果其中一个引用重新赋值 ,那么这个值了导致所有引用都会变。比C语言中的指针更高级。
“and符“写在变量的前面,表示起一个别名是a。c语言中“and符“写在等号后面表示取的是变量地址。
指针=门牌号,指针=门牌号,赋值时给的是地址。 所以指针存的是地址。
指向常量的指针。不能改变指针指向的内容值。
常量指针。
指向变量的位置,不能改变指针指向的地址位置
指向常量的常量指针
指向常量的常量指针(带两个const),指的是变量的值和地址都不能变。
考点
十进制前缀没有。8进制是0,16进制是0x。
如下是后缀。
考点 面向对象的四个特征
抽象性(分为数据抽象和功能抽象),继承性,封装性,多态性。
String和java区别,声明方式和取字符串中的某个字符
值传递和引用传递
如上图中,左侧写法在swap中改变传进来的形值不会使main中的实参a和b的值发生改变。
右侧写法swap中接收的参数是指向a和b的指针,所以在该方法中转换值会改变main中的a和b。
在转换过程中地址不会变,只是把该地址上的值改变了。
*pi中。pi存的是地址,*pi存的是值
c++中的引用
返回值的返回类型
内联函数
在执行代码之前,会把内联函数内的代码直接放到调用该内联函数的地方。这样在调用内联函数前就会获得内联函数内容,直接运行。
函数重载和默认参数
这就是默认参数,在声明方法时为形参赋默认值
参数模板
定义函数时的形参类型用T,这样传什么类型就是什么类型。
作用时,可以少函数重载的代码,用一个方法就行,
一般都是用T标识,使用函数模板之前需要声明,template
两个参数不一致时
如果两个参数的数据类型不一致,那么可以声明 template <class T1,class T2>,或者在实参直接强转
小知识点:
注意:字符类型的相加就是阿斯克码值相加。如’a’就等于97,‘A’是65
如果函数返回值是引用的话,那么形参变,实参也变。
通过这个例子
初始化一个类的指针对象时,是没有地址空间的。但是初始化正常对象是有地址空间
如果初始化一个类的指针时想让它有地址空间那么可以new,new相当于先开辟空间再调用构造函数、
如果使用new,那么就需要用delete给释放掉,否则就会在程序运行期间一直占用空间
如果在类体外定义函数,那么需要加上类名和作用域运算符如下:
相同一个类的两个对象,对象1赋值给对象2,就相当于把1的属性给到2里。
在定义类中的成员变量时,不允许直接赋给默认值。可以通过构造方法的默认参数。
复制构造函数
析构函数
对象析构的顺序是按着创建的倒叙。 栈
使用delete时会调用析构函数或者在函数结束后也会调
delete是先清理数据再释放空间
delete释放对象数组
对象数据成员
对象成员初始化通过构造方法的初始化参数列表,也是依赖构造方法。除了对象其他的都可以写到构造方法里面去。如K
类和对象的性质
对象的性质
类的性质
宏定义
相当于定义一个const常量是一样的 abc就代表2150,删除宏就用# under
考点:
const成员初始化
常对象只能访问常成员函数
C++中不允许在类中声明变量时给变量初始值,而且const修饰后不能在方法中通过=赋值。所以只能通过构造函数如下方式进行初始化。
常函数:
(重要)静态成员初始化在类的外面
静态成员在编译为.obj阶段就开始分配空间了。之后在程序运行阶段就不会在开劈空间,声明的所有对象在调用静态方法时都会去编译时分配的空间去找。
注意:初始化对象成员属性和const类、引用类型。必须使用构造方法的初始化参数列表
num(n)就相当于num = n
静态和常量一起使用的格式
友元函数
1、 使用友元函数直接写友元函数方法名即可调用,不需要使用对象名点的方法。
2、在友元函数体内只能用形参传来的对象引用类中属性。
3、友元函数可以直接访问类的私有成员,所以可以通过对象引用类中私有属性
x是one类型的属性。
把two类当作我,那么one中的func函数是我的朋友,one可以通过这个函数访问我的所有成员。
数组
对象数组
指针数组
指向类成员函数的指针
obj.*pfun,就相当于obj.value。*pfun就是指针的内容,pfun是地址
类的派生和继承
公有继承,基类中的公有和保护类型成员派生到子类还是公有和保护。私有不管什么继承方式子类都访问不到。
重要:调用子类的构造函数时会优先调用父类的构造函数。
基类的构造函数和析构函数不会给子类继承。
在调用派生类的构造函数时,通过构造方法的初始化列表为基类的私有属性初始化
定义派生类的构造函数格式
类的保护成员
父类引用指向子类对象,父类引用只能使用子类从该父类继承的。那么子类独自多的成员也不会引用。
如下图所示
赋值兼容规则
前提是公有派生
简单来说,把子类对象给父类引用,那么子类成员多于父类(中会有它独自的成员还有从父类继承的),指给父类后那么父类只会引用子类中包含父类的成员,子类中独有的它不会引用。
继承方式的等级
多继承的二义性
需要加类名双冒号引用
类模板
定义成员函数就需要声明类模板
类模板的继承
向量与泛型算法
对与数组来说,向量的数据类型也是一样的
遍历
泛性指针
不依托于数据类型,begin方法和end方法返回的是该位置的地址,门牌号
在Java中,叫做迭代器配合集合使用。
只熟悉前两句
下图中的a相当于a数组的首元素(1.1),
第二是a+1,第三是a+2,第四是a+3(2.2)。a+4相当于结束位置。
va(a,a+4)
capacity表示声明向量时,最多容纳的数量。
insert、push back记住即可
多态
分动态联编和静态联编。动通过用虚函数,静通过编译函数重载和模板
对应Java中,继承关系中子类对象指向父类对象。子类有重写
子类对象指向父类引用,如果调用基类的是虚函数就调用子类的成员。不是虚函数就调用父类的。
虚函数属于动态联编给初始化。不能是静态的,因为静态成员是在编译阶段初始化,动态联编是在运行阶段才会初始化。所以在程序执行顺序上两者有冲突。
考点:原因,虚函数没有重写,所以不属于动态联编
析构函数和构造函数就算调用虚构函数也不会产生动态联编,也就是直接调用基类继承来的方法。
析构函数可以是虚函数,但是构造函数不能是虚函数
纯虚函数
只要含有一个纯虚函数的类,叫抽象类。
1、因为声明抽象类不需要开辟空间。 所以抽象类不能实例化对象只能通过派生子类去使用,但是可以使用指针和引用。
2、如果派生的子类不想实现抽象类里面的纯虚函数,那么子类也变成抽象类就行了
注意:构造和析构函数如果调用纯虚函数会报错,因为纯虚函数是不占用空间,而构造和析构函数是创建和释放空间的,相互冲突。
运算符重载
下图中x+7就是调用重载后的运算符方法。
------------------------------------------------------------------------------
新建对话框程序
添加方法
新建控制台程序
用c语言的写法
用c++的写法输出
创建一个空的应用程序
C++ 语法
数据类型
常量
const
变量类型
extern
数据类型
字符型
数组
枚举类型
结构体
struct关键字是可以省略的
共用体
union
指针类型
指针变量存的是另一个变量的地址,给指针变量赋值为8相当于给另一个变量对应的值修改为8.
指针变量和数组的使用
指针变量存的是数组第一个元素的地址。因为指针存的是数组的地址,那么指针变量+1,将相当于数组的下一个元素(它存的地址的)。
指针和常量const的使用
引用类型
引用类型相当于同一个地址,有两个变量名。
自定义类型
typedef 数据类型(unsigned int)
运算符
位运算符
左移又移,左相当于2的几次方。
sizeof运算符
new和delete运算符
运算符的优先级和结合性
表达式
逗号表达式
三元运算符
语句
分支语句
跳转语句
循环语句
函数
给方法设置默认参数
这个排序方法的参数是数组,但是数组的长度是固定的10
这个排序方法的参数是数组,数组的长度是可变动的。
这个排序方法的参数是数组,数组可以不传递长度,使用引用变量。
值传递和引用方式传递参数
省略号参数
内联函数
重载函数
与运算符 ::
函数递归调用
函数指针
函数指针数组
作用域
全局作用域
如何访问同名称的全局变量
函数模板
定义和使用函数模板
重载函数模板
面向对象程序设计
类和对象
类的属性也可以定义在类的外面
类中的成员变量不能够初始化
类成员的访问权限
如何使用类的对象
构造函数和析构函数
复制构造函数
使用复制构造函数
当值传递传对象参数时,调用复制构造函数。当是引用函数时,就不需要调用。
析构函数
内联函数
如果函数的实现部分在类体中写,那么不用声明它也是内联函数。
静态类成员
静态成员属性
静态成员函数
隐藏的this指针
每个对象都有自己的属性和方法,就是因为有this指针
我们可以定义显式的指针,如果不定义编译器也会添加一个隐式的指针
运算符重载
关键字 operator+
友元类和友元方法
friend关键字
类的继承
子类和父类同名方法,在字类调用时会使用子类定义的。父类隐藏。java中叫重写
同名方法,字类想使用父类的方法就需要显示调用
虚方法
调用派生类可以使用虚方法调用子类的方法。
纯虚方法
C++是多继承,如水鸟类,既可以继承游类,也可继承飞类
调用继承的方法,两个父类都有同名的这个方法。那么需要使用 ::
虚继承
虚继承是一个派生类,继承的两个基类也同时继承object类。那么该派生类继承了两份在爷爷传过来的。那么使用虚继承会只继承一份。
水鸟 -> (鱼、鸟) -> 动物
虚继承操作:使语和鸟类都虚继承动物类即可。那么鱼就会只有一份来自动物类的东西。
类域
局部类
类模板
构建对话框
构建对话框应用程序
新建对话框
应用程序向导为我们产生两个类
构建单文档/视图应用程序
构建多文档/视图应用程序
其中几步和单文档一直,数据库支持,组件支持,应用程序特点,使用方式。
如下选择子框架类
对话框创建及显示
创建对话框
1、添加一个对话框,并为它创建一个类叫CXX。
添加标签
为对话框关联一个类,通过类向导关联一个类
显示对话框
显示对话框分两种形式,分为模态\非模态对话框
模态(也可叫模式)对话框显示
模态:只能点击对话框以内,不能点击对话框以外的面板。只能关闭该对话框才能进行其他操作。
在一个对话框添加一个按钮,点击按钮弹出另外一个对话框(用我们上面创建好的对话框CXX)
如下图这个对话框是程序的主对话框。
1、添加一个按钮
这个按钮有id值,光标在按钮上右键属性。如下
这个就是主对话框
2、通过类向导给主对话框中的按钮标签增加单击函数(类向导快捷键ctrl+w)
注意:在按钮双击也能和这个效果一样。
引用我们创建的对话框(叫CXX)的头文件,创建对象调用模态对话框方法.
注意:类型叫CXX,保存的文件会把C去掉。
创建模态对话框
非模态对话框
创建非模态对话框
在主对话框中再添加一个按钮
1、在主对话框类CRfrDlg,右键增加一个变量。
定义一个主对话框的一个变量,后面需要用它调用创建非模态对话框的方法
双击按钮,给它加鼠标单击事件。
主对话框的.cpp结尾的文件是执行文件
注意:成员变量的定义是在头文件中,如下图.h结尾的头文件。
添加头文件 #include “xx.h”
拿我们创建的对话框的id
因为.cpp文件引用了我们常见的变量,而变量是在.h头文件中,所以需要在头文件中添加引用另一个对话框的文件代码:#include “xx.h”,否则报错。上面已经引用了
对话框属性设置
如何找到并打开我们创建的对话框
1、
2、
对话框的标题
对话框右键属性
对话框的字体、边框
对话框的菜单
插入菜单
记住菜单的id
完成
在对话框中操作控件
对话框的目的是用于显示控件的,控件在控件箱中。
添加三个标签(控件箱中的Aa),选中三个标签,在下方可进行操作如对齐方式等。再选中文本框(ab|)
重要。实例
首先创建一个对话框程序上面操作都有
做一个小功能,在控件的属性中设置id
1、
给标签映射变,第一个是金额。其他同理 快捷键打开类向导ctrl + w
2、给按钮做一个函数
双击按钮
添加对话框成员及成员函数
新建对话框程序
增加变量
这个对话框对应的类是这个,为它增加一个普通成员,变量a。
解决bug
刚才的类名没有了,编辑一下,加个空格,保存
这个对话框的类就出现了
增加后的成员变量
增加函数同理
增加消息处理函数
自定义增加命令消息
消息对话框
增加一个消息(程序关闭时出现消息,close)
或者ctrl + w 使用类向导
通用对话框
创建一个对话框程序,FileDialog
常用控件
常用文本控件
静态文本设置颜色方法使用(SetTestColor)应该写在WM_CTCOLOR消息中。
创建一个对话框程序。tt
我们把这个注释设置成红色的。
模拟按钮控件单击事件
改个名字
ctrl + w打开类向导
双击字体即可触发
编辑框控件
创建对话框应用 56
使编辑框为密码框
使编辑框只读
设置多行
多行 按回车建可以切换下一行
打开类向导,给第四个文本框设置一个变量。获取文本框的值并提示出来
ctrl+w
方式1
方式2
画两个按钮
方式2
图像控件
新建对话框程序,yt
删掉没用控件
可以先插入一张图片
被盖住了可以设置顺序
按钮控件
创建一个对话框程序,mj
方法1
方法2
这样就可以在这里面写按钮事件了
复选框控件
创建对话框程序
加入一个组控件
单选按钮控件
加入四个单选按钮,使用区域控件分成两个区域。
使每个区域是一个单选按钮组。
1按钮选中group属性
3同理
按钮分组也可以按照看见的顺序
组合框控件
也就是下拉框
创建对话框程序,增加一个组合框控件
右键组合框增加内容
需要编辑组合框的大小,否则看不到内容
怎么选中组合框的内容
映射一个变量
选择组合框时增加一个函数
列表框控件
避免插入重复数据
在列表框中实现复选功能
双击按钮,打开单击事件
进度条控件
新建一个对话框程序
加入进度条控件
为进度条控件增加一个变量
在进度条的初始化方法中,设置进度条范围
修改成
编写计时器事件,为进度条增加计时器,每一秒进度一点
菜单栏
新建一个对话框,再资源视图中右键插入
建立弹出菜单就可以建立它的子菜单
给每个菜单加上id容易区分
使用类向导为他们增加函数