宏定义函数
省略参数类型 ()里是返回值
#define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
#define isLeap(n) (n%400==0||(n%4==0&&n%100!=0)?1:0)
public\private\protected
1.private成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.protected成员可以被派生类访问。
public可被类外访问。
继承
派生类继承方式
public继承:父类成员在子类中保持原有访问级别
private继承:父类成员在子类中变为private成员
protected继承:父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
类型兼容性原则
派生类可以被当作基类使用 子类就是特殊的父类
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
继承中的构造析构调用原则
构造时 父类->子类 析构时相反
组合
组合:类中有类,强调has a
先构造父类,再构造成员变量、最后构造自己
派生类中有同名成员/函数
1.直接调用访问的是子类成员/函数
2.子类可以通过添加作用域来访问父类中的同名成员成员/函数
s1.father::fun(110);
派生类中访问static
基类定义的静态成员,将被所有派生类共享
类名 :: 成员
虚继承
如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象
要使这个公共基类在派生类中只产生一个子对象,必须对这个基类
声明为虚继承,使这个基类成为虚基类。
class B1:public virtual A;
虚函数&&纯虚函数&&抽象类
虚函数
C++中的虚函数的作用主要是实现了多态的机制。第一层是在基类中用virtual关键字声明的,第二层是要在多个派生类中被重新定义。
虚函数允许函数调用与函数体之间的联系在运行时才建立
构造函数不可以是虚函数
而析构函数可以是虚函数
纯虚函数
虚函数=0 在基类中无定义
抽象类
拥有纯虚函数的类叫作抽象类,无法实例化。
delete 和 delete[]的区别
- 对于基本数据类型来说,相同
- 对于自定义的数据类型来说,delete 仅回收该指针指向的内存
delete[]回收指向数组的所有内存