如果不使用虚函数,则使用指向派生类的基类指针的任何目的

Raj*_*esh 5 c++ inheritance

我正在查看几篇关于使用基类指针指向派生类对象的好处的帖子(如下所列)。但大多数情况下,虚函数才是使用基类指针的最终目的。我对其中一些帖子添加了评论,但我想由于这些帖子已经过时,因此没有收到回复。现在我的问题是,如果我们不使用虚函数概念,在其他情况下使用基类指针是否有任何目的?

在下面的代码中,

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.派生类为何使用基类指针

  1. 基类指针可以指向派生类对象。为什么反之则不然呢?

  2. 在C++中将派生类指针分配给基类指针

Jon*_*tor 5

使用基类指针或引用允许您编写一般接受基类的所有派生类的函数,以便您可以在它们上调用常见的非虚拟函数。否则,您必须为不同的派生类多次编写相同的函数,或者使用模板。

#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)