面向对象2017课程复习
研究生选修课程,根据老师画的重点总结一下,希望能够温故而知新。
重点内容:
PPT内容提取总结
1,c++程序一般生成过程: 编辑(.cpp,.c,.hpp,.h文件)-----编译(生成obj文件)---链接(将obj链接生成可执行exe文件)---执行调试
2,c++程序结构:注释,输入输出,函数,变量(对象),符号常量,表达式,语句
3,类型定义关键字typydef ----用来为复杂的声明定义简单的别名:例:typederf int size;就可以使用size代替int使用
4,string是抽象数据类型(个人mark!)
5,向量vector是一个模板类,重点理解!
vector中所有对象的类型都相同
每个对象都有一个索引
vector<int> iv ; vector<float>fv;//括号里是模板参数
初始化: vector<T> v2(v1);//拷贝构造
vector<T> v2 = v1;//赋值初始化
vector<T> v(n, value);//n个重复值构造 vector<int> chess(10,1);
vector<T> v{a,b,c,d....};//列举具体构造值
vector<T>v = {a,b,c....};
主要操作函数:
empty();//判断是否为空
push_back();//向集合中添加元素
size();//返回s的字符个数
V[n]// 向量中,第n个对象,下标从零开始
迭代器运算: 读写迭代器(iterator) 只读迭代器(const_iterator)
跟指针类似,直接看下面使用实例
6,运算符优先级及短路求值策略
例如 expr1 &&expr2 如果第一个表达式为假,则第二个表达式可能未执行,注意是否会影响运算结果
7.成员访问运算符,对象用点(.)指针用箭头(->)
8,数据类型强制转换(显示、隐式)
在数据进行运算之前,较低的数据类型,向较高的数据类型进行转换。
****自动转换类型:运算式中存在float类型时,无条件转换为double型,即4字节浮点数转化为8字节浮点数。
精度丢失问题,int i; float f = 3.5 ; i = f;
9,枚举类型enum
9.1 其中 无类型名变量的定义只能进行一次,不可重新定义
9.2 可用于计算,使用强制类型转换,例:
enum weekday {sun,mon,tue,wed,fri,sat}num1.num2;
num1=(enum weekday)(sun+2); //num1的结果为tue,(sum+2)被强制转换
num2 =(enum weekday)7 ; //合法,将整数7强制转换为枚举类型后赋值。然而weekday中sun对应的值为0,以此类推,所以num2=? 答案是7,虽然语法没有错误但是由于在enum表里找不到对应值,所以为原值
10,const关键字(非重点,仅做理解)
const关键字用来修饰常量,用来修饰一定不会改变的数据。
const还可以修饰函数的形参,防止由于意外而改动指针。这里要提一下形参的引用传递和值传递 ,值传递优点是不会改变原始数据,但是会需要额外的内存空间存储其备份。这里可以使用引用传递,即传递指针,
然后使用const修饰指针。这样既不会需要额外空间(对于占用大的对象重要),又可以保证,函数内部不会修改原始数据,保证了数据安全。
const修饰函数的返回值,那么函数的返回值需要用const修饰的变量接受,不能被修改。
如果这里讲的不清楚的话可以参考该链接:http://blog.csdn.net/zcf1002797280/article/details/7816977
11,window程序启动过程
12,串行化:将对象保存到磁盘上或从磁盘上恢复的过程
13,inline关键字,可以提高函数执行的效率,是以代码复制为代价。
14,运算符重载:主要记住定义方式,注意阅读代码题中,各种符号的重定义,可能影响输出结果
类的成员函数定义:
类的友元函数定义:
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。上述函数非complex的成员函数,所以输入形参为两个对象引用。
15,虚函数与动态绑定,纯虚函数与抽象类
简单来说,动态绑定指的就是继承后,对父类中函数重载的方式,因为c++中,子类是不能随便重写父类的函数,除非使用virtual修饰的
纯虚函数表示一个声明,含有纯虚函数的类就是抽象类,不能实例化。他们存在的意义是规定了一种规范,其子类要照着这种规范定义,使用函数。
注意!!! 关于子类实例化的对象,强制转换为父类对象,则会调用父类函数(重写无效)。然而将子类对象指针强行转换为父类指针,则可以指向子类函数(动态绑定)题目参考扫描版第五页
我押这道题一定会考
往届题目习题内容知识点:
1,对话框有两种形式:模态,非模态。
模态:指获得焦点之后,除非关闭,焦点或者输入光标一直停留在该对话框。
非模态:不会强制焦点,可以在不同的窗口间来回切换
对话框的创建过程
2,线程可以分为:用户界面线程,工作者线程
3,重载是指同一个函数名,但是 参数个数,参数类型 不同的一类函数
4,在类继承时,可以使用多个类作为基类。
在c++上是正确的,因为其可以多继承。然而如java这种面向对象语言并不支持多继承,而是通过接口实现多继承。
5,程序编译时产生错误是因为程序中的语法错误。(错)
还可能存在变量重复定义,上下文关系错误
6,列举单文档程序的主要框架类:CApp类,Cdoc类,Cview类,CmainFrame类
7,c++程序的编译链接过程中,对函数的调用处理分为:静态绑定,动态绑定
8,MFC中,视图类是窗口类的派生类
MFC中三种常用的GDI对象:CPen,CBrush,CBitmap
9,面向对象三个特点:继承,多态,封装(以后面试也会被问的,理解的越深刻越好),各自定义,举例用代码说明等
10,线程同步的方法:原子访问,互锁函数,关键代码
11,使用设备上下文对象的两种方法??selectStockObject(),selectObject()
12,winmain函数的主要功能?
答:注册窗口类,创建主窗口,显示主窗口,进入消息循环,遇到WM_CLOSE消息退出
13,对话框的创建过程?
1,添加对话框资源,
2,为新加入的对话框资源添加类
3,声明对话框类的对象,并添加该类的头文件
4,调用该类的DoModel函数来激活模式对话框,或者先调用Create函数,然后调用ShowWindow函数来激活非模态对话框
14,坐标映射方式:设备坐标,逻辑坐标,映射方式
--------------------------------------------------------------------
老师不按套路出牌,开放题不要浪费太多时间,读程序写结果的题都是恶心的加减法计算,没时间可以后写。
最后面的编程设计大题,和选择大题基本就是送分题,mvc考察内容很少,选重点复习就行。