1.面向对象基本概念:封装,继承,多态,重载(封装是优点,继承是基础,重载是特点,而多态则是特征)
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
继承:指可以让某个类型的对象获得另一个类型的对象的属性的方法;实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
多态:一个类实例的相同方法在不同情形有不同表现形式;要实现多态必须满足三个条件:1.继承;2.子类重写父类的方法;3.父类引用变量指向子类对象。
注:继承是子类使用父类方法,多态是父类使用子类方法。
2.C++编译器会自动为类产生 构造函数 拷贝构造函数 析构函数 赋值函数。
3.构造函数和拷贝构造函数:
构造函数:构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值
拷贝构造函数:在1.对象赋值;2.对象作为形参传递;3.函数返回值为对象的情况下会被调用;当构造函数有动态申请内存时,需 要重写拷贝构造函数,且要进行深拷贝
4.初始化成员列表和构造函数
一下4中情况必须使用初始化成员列表:
a.初始化一个引用成员变量;b.初始化一个const变量;c.当我们在初始化一个子类对象的时候,而这个子类对象的父类有一个显示的带有参数的构造函数;d.类的成员是对象成员初始化,而该对象没有无参构造函数
5.抽象类:不用来定义对象而只作为一种基本类型用作继承的类
6.运算符重载:为了对用户自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致,其中(*、::、?、sizeof、.)不能被重载
7.对象间通过静态成员变量实现数据共享
8.const、static、指针:
const char *p 指向常量的指针
char * const p 指向变量的常指针
int *p[n];—–指针数组,每个元素均为指向整型数据的指针。
int (*)p[n];—p为指向一维数组的指针,这个一维数组有n个整型数据。
int *p();——函数带回指针,指针指向返回的值。
int (*)p();—-p为指向函数的指针
9.new、delete、delete[]、free、malloc
new 和 delete是用来创建和删除对象的,会调用类的构造和析构函数;malloc和free是用该申请和释放堆内存的;delete[]是用来释放一组对象的。
10.内存分配:
栈区:函数参数值、局部变量值
堆区:new和malloc申请区
静态数据区:全局变量,常量
11.private、protect、public
private是私有类型,只有本类中的成员函数访问;protect是保护型的,本类和继承类可以访问;public是公有类型,任何类都可以访问
12.引用和指针区别
a.引用必须被初始化,指针不必;b.引用初始化以后不能被改变,指针可以改变所指的对象;c.不存在指向空值的引用,但是存在指向空值的指针
13.C++不是类型安全的,两个不同类型的指针之间可以强制转换
14.C++函数中值的传递方式:值传递、指针传递、引用传递
15.SendMessage和PostMessage有什么区别:SendMessage是阻塞的,需要等消息处理完;PostMessage是非阻塞的。
16.#include <filename.h>编译器先从标准库路径开始搜索; #include “filename.h” 编译器先从用户工作路径开始搜索
17.在Win32下 char, int, float, double各占多少位?
(1) Char 占用8位
(2) Int 占用32位
(3) Float 占用32位
(4) Double 占用64位
18.struct(结构) 和 union(联合)的区别
结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同); 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的