多态性:
指具有不同函数体的函数可以用同一个函数名,这样就可以用一个函数名调用不同实现内容的函数。
函数重载时编译器根据函数调用时的实参确定函数调用与函数体的匹配关系,一般称为编译时多态性或静态多态性。
可以将基类与派生类中的原型相同的函数声明为虚函数,虚函数可以通过基类指针来访问基类和派生类中的原型相同的函数。
虚函数在类体内声明,格式:
------------virtual 返回值类型 成员函数名(形参表);
成员函数的实现部分可以在类体内,也可以在类体外,在类体外定义时不加关键字virtual。
虚函数在基类声明时一定要加关键字virtual,在派生类中声明虚函数时可以省略关键字virtual.
基类指针指向派生类对象,会进行指针类型转换,将派生类对象的指针转换为基类的指针,所以基类指针只是指向派生类对象中的基类部分。 通过虚函数,在派生类的基类部分中,派生类的虚函数取代了基类原来的虚函数,这样就实现了当基类指针指向派生类对象后,调用虚函数实际上调用了派生类的虚函数。
虚函数不能声明为静态成员函数, 构造函数不能声明为虚函数(不能通过指针直接或间接调用构造函数)。析构函数可以通过删除指针间接调用析构函数,所以可以声明为虚析构函数。
通过 函数形参是基类对象的引用而实参是不同类对象,采用虚函数方式时实现多态性的另一个常用使用方式。
采用虚函数实现的多态性一般称为运行时多态性或动态多态性。
如果将基类的析构函数声明为虚函数,由基类所派生的派生类的析构函数也都自动成为虚函数(即使派生类的析构函数与基类的析构函数名不相同)。在c++程序设计时最好把基类的析构函数都声明为虚函数。这样当在程序中用delete运算符释放一个对象时,系统会调用相应类的析构函数。
纯虚函数:
声明:
------------virtual 返回值类型 函数名(形参表)=0;
纯虚函数没有函数体,所以不能被调用,因此 包含纯虚函数的类是无法建立对象的,而只作为一种用作继承的基类。称含有纯虚函数的类为 抽象类或抽象基类。
虽然抽象类不能定义具体对象,但可以定义抽象类的指针变量。
指具有不同函数体的函数可以用同一个函数名,这样就可以用一个函数名调用不同实现内容的函数。
函数重载时编译器根据函数调用时的实参确定函数调用与函数体的匹配关系,一般称为编译时多态性或静态多态性。
可以将基类与派生类中的原型相同的函数声明为虚函数,虚函数可以通过基类指针来访问基类和派生类中的原型相同的函数。
虚函数在类体内声明,格式:
------------virtual 返回值类型 成员函数名(形参表);
成员函数的实现部分可以在类体内,也可以在类体外,在类体外定义时不加关键字virtual。
虚函数在基类声明时一定要加关键字virtual,在派生类中声明虚函数时可以省略关键字virtual.
基类指针指向派生类对象,会进行指针类型转换,将派生类对象的指针转换为基类的指针,所以基类指针只是指向派生类对象中的基类部分。 通过虚函数,在派生类的基类部分中,派生类的虚函数取代了基类原来的虚函数,这样就实现了当基类指针指向派生类对象后,调用虚函数实际上调用了派生类的虚函数。
虚函数不能声明为静态成员函数, 构造函数不能声明为虚函数(不能通过指针直接或间接调用构造函数)。析构函数可以通过删除指针间接调用析构函数,所以可以声明为虚析构函数。
通过 函数形参是基类对象的引用而实参是不同类对象,采用虚函数方式时实现多态性的另一个常用使用方式。
采用虚函数实现的多态性一般称为运行时多态性或动态多态性。
如果将基类的析构函数声明为虚函数,由基类所派生的派生类的析构函数也都自动成为虚函数(即使派生类的析构函数与基类的析构函数名不相同)。在c++程序设计时最好把基类的析构函数都声明为虚函数。这样当在程序中用delete运算符释放一个对象时,系统会调用相应类的析构函数。
纯虚函数:
声明:
------------virtual 返回值类型 函数名(形参表)=0;
纯虚函数没有函数体,所以不能被调用,因此 包含纯虚函数的类是无法建立对象的,而只作为一种用作继承的基类。称含有纯虚函数的类为 抽象类或抽象基类。
虽然抽象类不能定义具体对象,但可以定义抽象类的指针变量。