面向对象的多态性可以分为四类:重载多态、强制多态、包含多态和参数多态
函数重载属于重载多态
不同类型变量相加强制类型转化,属于强制多态
包含多态是类族中不同类的成员函数重名,需要虚函数实现重写属于包含多态
参数多态主要是类模板实现
静态联编:联编在编译连接时进行
静态联编的执行效率高
动态联编:在程序运行时执行的动态绑定
提供了灵活的编程灵性、问题抽样性、程序易维护性
运算符重载属于静态联编
运算符重载主要包含为重载为成员函数和重载为友元函数
只能重载c++已有的运算符,不能重载的有. 、* 、::、 sizeof() 、?:
重载后的优先级和结合性不变
友元函数必须全部参数必须通过形参传递给运算符重载函数
特殊的对于前置和后置运算符++ 前置 类名&operator++(类名&)后置 类名 operator++(类名引用,int)int只用于区别与前置
重载插入运算符 friend istream & operator>>(istream& in ,complex &c;){return in;}
类型转换函数
Int a=10;
Operator double()
{return a;}
虚函数:
因静态成员函数和友元函数不属于某个类,所以虚函数不可以是两者
虚函数定义为内联函数无效
构造函数不可是虚函数,析构函数可以是,且通常是
定义一基类变量指针
基类对象的地址或者派生类对象的地址赋值给该指针变量
指针-》虚函数的形式调用虚函数
要求派生类函数名、函数类型、参数个数和类型全部与基类的虚函数一致
基类声明虚函数,其派生类的同名成员函数自动成为虚函数
虚函数与重载函数的区别:
虚函数根据对象不同去调用不同类的虚函数
虚函数是动态联编
构造函数可以重载,析构函数不能重载,虚函数不能是构造函数,析构函数一般是虚函数
对象的存储:
非静态数据成员放在每一个对象体内作为对象的专有成员
静态数据成员被提取出来存放在静态区,所有对象数据共享
静态成员和非静态成员函数都是所有对象共享,都保存在静态存储区,静态成员和构造函数只初始化一次
纯虚函数:
提供了一个公共继承接口
Virtual<int> fun()=0存在纯虚函数的类属于抽象类,无实际意义,不可实例化,若派生类没有定义纯虚函数,派生类也是抽象类
不能声明抽象类的对象,但是可以声明抽象类的指针和引用