我正在查看几篇关于使用基类指针指向派生类对象的好处的帖子(如下所列)。但大多数情况下,虚函数才是使用基类指针的最终目的。我对其中一些帖子添加了评论,但我想由于这些帖子已经过时,因此没有收到回复。现在我的问题是,如果我们不使用虚函数概念,在其他情况下使用基类指针是否有任何目的?
在下面的代码中,
pEmp->计算TotalSalary
由于缺少虚函数,因此调用基类函数。这是预期的行为。
#include <iostream>
using namespace std;
class Employee
{
public:
void computeTotalSalary ()
{
cout<<"Computing Employee Salary in Base Class:"<<endl;
}
};
class TeachingStaff : public Employee
{
public:
// Override the function
void computeTotalSalary ()
{
cout<<"Computing Teacher's Salary in Sub class: "<<endl;
}
};
int main()
{
TeachingStaff *pTeacher = new TeachingStaff() ;
pTeacher->computeTotalSalary();
Employee *pEmp;
pEmp = pTeacher;
pEmp->computeTotalSalary();
pTeacher->Employee::computeTotalSalary();
}
Run Code Online (Sandbox Code Playgroud)
链接: 1.派生类为何使用基类指针
使用基类指针或引用允许您编写一般接受基类的所有派生类的函数,以便您可以在它们上调用常见的非虚拟函数。否则,您必须为不同的派生类多次编写相同的函数,或者使用模板。
#include <iostream>
class base_t {
public:
void non_virtual() const { std::cout << "Hello, World!\n"; }
};
class derived_1_t : public base_t { };
class derived_2_t : public base_t { };
void do_something(const base_t& obj) {
obj.non_virtual();
}
int main() {
derived_1_t var1;
derived_2_t var2;
do_something(var1);
do_something(var2);
}
Run Code Online (Sandbox Code Playgroud)