C++:成员函数详解 - 普通、虚、纯虚函数的区别与应用

0 下载量 147 浏览量 更新于2024-08-29 收藏 81KB PDF 举报
"C++语言中的成员函数类型包括普通成员函数、虚函数和纯虚函数,它们在类的设计和多态性方面扮演着不同角色。普通成员函数不具备运行时多态性,虚函数则用于实现多态,而纯虚函数则是抽象类的标志,强制要求派生类提供具体实现。" 在C++编程中,了解和熟练运用这些函数类型至关重要。首先,普通成员函数是类中的常规方法,它们的行为和调用在编译时就已经确定。当通过指针或引用调用这类函数时,会根据指针或引用的实际类型而非其声明类型来执行相应的函数。例如,`Person`类的`ShowInfo`函数就是一个普通成员函数,它会直接显示人员的基本信息。 ```cpp class Person { public: void ShowInfo() { /*...*/ } }; Person p("Alice", 30); Person* ptr = &p; ptr->ShowInfo(); // 调用Person的ShowInfo ``` 虚函数的引入是为了支持运行时多态性。在基类中声明一个虚函数,意味着所有派生类都可以覆盖这个函数并提供自己的实现。例如,`Person`类可以有一个虚函数`DisplayDetails`: ```cpp class Person { public: virtual void DisplayDetails() { /*...*/ } }; class Teacher : public Person { public: void DisplayDetails() override { /*...*/ } // 覆盖基类的DisplayDetails }; ``` 此时,如果有一个指向`Teacher`对象的`Person`指针,调用`DisplayDetails`将执行`Teacher`的版本,而不是`Person`的。 纯虚函数是在基类中声明但不提供具体实现的虚函数。它的存在使得基类成为抽象类,不能实例化。派生类必须覆盖这个纯虚函数,否则也会变成抽象类。比如,`Person`可以是一个抽象基类,包含纯虚函数`TeachOrStudy`: ```cpp class Person { public: virtual void TeachOrStudy() = 0; // 纯虚函数 }; class Teacher : public Person { public: void TeachOrStudy() override { /*...*/ } // 必须提供实现 }; class Student : public Person { public: void TeachOrStudy() override { /*...*/ } // 也必须提供实现 }; ``` 这样,`Person`类就不能被实例化,而`Teacher`和`Student`可以根据`TeachOrStudy`的具体实现进行不同的行为。 C++的普通成员函数、虚函数和纯虚函数提供了不同层次的灵活性和多态性。普通成员函数适用于不涉及多态的情况,虚函数用于实现基于对象实际类型的动态绑定,而纯虚函数则用于定义接口,确保派生类提供必要的功能实现。理解和熟练应用这些概念是成为一名专业C++程序员的基础。