1.多态性
多态是操作接口的
2.运算符重载
对已有的运算符赋予更多的含义,使同一运算符作用于不同类型的数据导致不同的行为。运算符重载是对新类型数据的实际需要,对原有运算符进行适当的改造。
运算符的重载实际上就是函数的重载。
运算符重载的类型有两种,重载为非静态成员函数和重载为非成员函数。
运算符重载为类的成员函数的一般语法形式:
返回类型 operator 运算符(形参表)
{
函数体
}
运算符重载为非成员函数的一般语法形式:
返回类型 operator 运算符(形参表)
{
函数体
}
返回值类型:重载运算符的返回值类型,也就是运算符的结果类型
operator:定义运算符重载函数的关键字。
运算符:就是运算符的名称,必须是可以重载的运算符,比如重载加法运算符,就写“+”。
形参表:给出重载运算符
运算符重载举例---复数的四则运算
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0.0, double i=0.0):real(r),imag(i){}
Complex operator+(const Complex &c2)const;
Complex operator-(const Complex &c2)const;
Complex operator*(const Complex &c2)const;
Complex operator/(const Complex &c2)const;
void display()const;
private:
double real;
double imag;
};
Complex Complex::operator+(const Complex &c2)const
{
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator-(const Complex &c2)const
{
return Complex(real-c2.real,imag-c2.imag);
}
Complex Complex::operator*(const Complex &c2)const
{
return Complex(real*c2.real,imag*c2.imag);
}
Complex Complex::operator/(const Complex &c2)const
{
return Complex(real/c2.real,imag/c2.imag);
}
void Complex::display()const
{
cout<<"the real is: "<<real
<<" the imag is: "<<imag<<endl;
}
int main()
{
Complex c1(4,5),c2(6,7),c3;
int x=9;
c1.display();
c2.display();
cout<<"the c2-c1: ";
c3=c2-c1;
c3.display();
c3=c2+c1;
cout<<"the c2+c1: ";
c3.display();
c3=c2*c1;
cout<<"the c2*c1: ";
c3.display();
c3=c2/c1;
cout<<"the c2/c1: ";
c3.display();
return 0;
}
其中的运算符+ 、-、*、/(B),都重载为类Complex的成员函数,定义Ccomplex的对象c1、c2,经过重载以后,表达式oprd1 B oprd2相当于 oprd.operator B(oprd2)。
其中返回的时候,创建一个无名对象并返回:
return Complex(real+c2.real,imag+c2.imag); //创建无名对象,并返回
这是临时的语法,含义是:调用Complex 构造函数创建一个临时对象并返回它。当然也可以用常规方式:
Complex Complex::operator+(const Complex &c2)const
{
return Complex c4(real+c2.real,imag+c2.imag); //常规方式
}
复数运算符举例
3.虚函数
4.抽象类