gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:05 25 4
gpt4 key购买 nike

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

在下面的代码中,

pEmp->computeTotalSalary

调用基类函数,因为缺少虚函数。这是预期的行为。

#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();
}

链接:1. Why use base class pointers for derived classes

  1. A Base Class pointer can point to a derived class object. Why is the vice-versa not true?

  2. assigning derived class pointer to base class pointer in C++

最佳答案

使用基类指针或引用允许您编写接受基类的所有派生类的函数,这样您就可以在它们上调用通用的非虚函数。否则,您将不得不为不同的派生类多次编写相同的函数,或者使用模板。

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

关于c++ - 如果不使用虚函数,使用基类指针指向派生类的任何目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com