在C++编程语言中,成员函数分为三种类型:普通成员函数、虚函数和纯虚函数。这三种函数各自具有不同的特点和用途,对于理解和利用面向对象编程的关键特性至关重要。 1. **普通成员函数(Non-virtual Member Function)** - 普通成员函数在编译时绑定,也称为静态绑定或早绑定。这意味着调用哪个函数是在编译阶段决定的,基于指针或引用的类型而非实际指向的对象类型。 - 在【Demo1】中,`Person`类的`ShowInfo()`就是一个普通成员函数。当通过`Person`类型的指针调用`ShowInfo()`时,编译器会确定调用`Person`类的`ShowInfo()`,而不会考虑实际对象可能是`Teacher`或`Student`。 - 在【Demo2】中,虽然`pTeacher`和`pStudent`实际上是`Teacher`和`Student`对象,但因为`ShowInfo()`是非虚函数,所以仍然调用了`Person`类的`ShowInfo()`,导致信息显示不完整。 2. **虚函数(Virtual Member Function)** - 虚函数用于实现运行时多态性。在基类中声明虚函数,使得可以通过基类指针或引用调用子类重写的该函数,实现动态绑定或晚绑定。 - 当我们在基类中声明一个虚函数,如`virtual void ShowInfo()`,则所有派生类都可以重写这个函数,即使在基类中未给出具体实现。如果通过基类指针调用虚函数,程序将在运行时根据实际对象的类型来确定调用哪个版本的函数。 - 如果在【Demo2】中将`Person`类的`ShowInfo()`改为虚函数,那么`pTeacher`和`pStudent`将会正确调用各自的`ShowInfo()`,显示完整信息。 3. **纯虚函数(Pure Virtual Function)** - 纯虚函数在基类中声明,表示基类是抽象类,不能实例化。它不提供任何具体实现,但要求所有派生类必须提供一个实现。 - 通过声明`virtual void ShowInfo() = 0;`,`Person`类成为抽象类,强制`Teacher`和`Student`类提供`ShowInfo()`的具体实现。纯虚函数可以作为接口,定义派生类必须实现的行为。 - 纯虚函数是多态性的基础,但不同于普通虚函数,它不能被直接调用,只能通过派生类的实例调用。 总结来说,普通成员函数适用于不需要多态性的场景;虚函数是实现多态的关键,允许通过基类指针调用子类的重写函数;纯虚函数用于定义抽象类,强制派生类提供实现,并且是多态性的一个重要组成部分。理解这些概念对于编写高效、灵活的C++代码至关重要。在设计类层次结构时,合理运用这三种函数类型可以帮助我们更好地控制对象的行为和状态。
- 粉丝: 3
- 资源: 940
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助