运算符重载
运算符重载的本质是函数重载。使用运算符重载的目的使用户自定义的类型像内置类型一样用运算符进行相应的操作,定义重载运算符与普通函数类似。函数名由关键字operator和要定义的运算符组成,返回类型为运算结果的类型,参数表为提供参与运算的操作数,参数个数取决于操作数函数即是一元运算符还是二元运算符。
重载运算符的限制:
1.不改变运算符的优先级
2.不改变运算符的结合性
3不改变运算符所需要的操作数
4.不能创建新的运算符(运算符重载时一定要注意)
支持重载的运算符有:双目算数运算符,关系运算符,逻辑运算符,单目运算符,自增自减运算符,位运算符,赋值运算符等等。运算符重载不可滥用,只有在类需要的操作在逻辑上与运算符相关,才可以定义,并且对于逻辑与,或,逗号运算符都是不建议重载的运算符。
具体格式:
函数类型 operator 运算符名称(形参表列)
{
重载实体;
}
2,组合与继承
组合:将一个类的对象作为另一个类的成员,被称作组合或包含,成员对象是组合对象的一部分,随着组合对象的创建而创建,随着组合对象的撤销而撤销,对象成员初始化:创建包含对象成员的组合对象时,会执行成员类的构造函数初始化对象成员,当组合对象被撤销时,会执行其析构函数,成员对象的析构函数也会被执行,析构函数的执行次序和构造函数相反。
继承:在已有类的基础上继承得到新类型,这个新类型自动拥有已有类的特性,并可以修改继承到的特性或者增加自己的新特性 ,在C++中,被继承的已有类称为基类;继承得到的新类称为派生类;派生类可以再被继承,这样构成的层次结构称为继承层次。
基本格式:
class 派生类名字 :[访问限定符] 基类名字 {成员声明;};
多继承:一个类有多个直接基类的继承关系称为多继承。
多继承声明语法
class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n
{
数据成员和成员函数声明
};
虚函数与多态
多态性是指一个名字,多种语义;或界面相同,多种实现。
重载函数是多态性的一种简单形式。
虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。
多态实现的前提就是虚函数,函数的一般形式为:virtual 函数返回值类型 虚函数名(形参表){函数体}
虚函数必须是类的非静态成员函数(且非构造函数),且访问权限是public。并且非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为函数,但可以将析构函数定义为虚函数。
在派生类中重载基类的虚函数要求函数名、返回类型、参数个数、 参数类型和顺序完全相同, 如果仅仅返回类型不同,C++认为是错误重载,如果函数原型不同,仅函数名相同,丢失虚特性。
纯虚函数(一种特殊的虚函数):纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。
一个具有纯虚函数的类称为抽象类。抽象类对象不能做函数参数,不能创建对象,不能作为函数返回类型;可以声明抽象类指针,可以声明抽象类的引用;子类必须继承父类的纯虚函数才能创建对象。