C++使用基类指针访问派生类方法
C++ access a derived class method using a base class pointer
我正在尝试访问get_workhour()
函数。我该怎么做?多态性是否仅适用于覆盖函数?
manager
类有一个特殊的函数get_workhour()
该函数在基类employee
中不存在。当两个类的对象都存储在employee
类型的向量中时,我们如何使用多态性调用该函数?
#include <iostream>
#include <vector>
using namespace std;
class employee{
protected:
string name;
double pay;
public:
employee(){
name="xyz";
pay =0.0;
}
employee(string name,double pay) {
this->name = name;
this->pay = pay;
}
string get_name(){
return name;
}
virtual double get_pay(){
return pay;
}
};
class manager:public employee{
protected:
int workhour;
public:
manager(){
workhour = 0;
}
manager(string name,double pay,int workhour):
employee(name,pay){
this->workhour = workhour;
}
virtual int get_workhour(){
return workhour;
}
virtual double get_pay() {
return pay + 100;
}
};
int main()
{
employee emp1("vivek",1500);
manager m1("william",1300,10);
vector<employee*> emps;
emps.push_back(&m1);
emps.push_back(&emp1);
cout<<"Name of manager is : "<<emps[0]->get_name()<<endl;
cout<<"Pay for the manager is :"<<emps[0]->get_pay()<<endl;
cout<<"Workhour of manager is : "<<ptr->get_workhour()<<endl;
cout<<"Name of employee is : "<<emps[1]->get_name()<<endl;
cout<<"Pay for the employee is : "<<emps[1]->get_pay()<<endl;
return 0;
}
你不能
也不应该。如果您希望通过 Base
的接口与所有Derived
进行交互,那么您想要对Derived
执行的所有操作都必须由 Base
的接口表示。
一般来说,C++(以及大多数面向对象的语言)试图阻止向下转换(将基类型转换为派生类型)。如果您绝对需要,您可以使用dynamic_cast将员工投射到经理。但是,仅当您确定指针实际上指向经理时,才执行此操作。如果没有强制转换,则只能访问基类型的接口。
您可以按如下方式使用这些dynamic_cast:
manager* m = dynamic_cast<manager*>(emps[0]);
一种选择是在基类中为 get_workhour() 提供一个空方法,然后让管理器类覆盖它。
相关文章:
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 按基类对象访问派生类资源时出错
- C++11: 如何访问派生类中的基类成员?
- 访问派生类的 QMetaObject
- 使用基类对象访问派生的仅类方法
- 如何在 c++ 中通过基类引用访问派生类的对象?
- 如何在 c++ 中使用多态性访问派生类字段?
- C++继承从基类指针访问派生类中的非虚拟函数
- 无法访问派生类中的基类方法
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- 如果我们有一个基*类,如何访问派生模板类的成员函数
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 通过在基类中虚拟调用派生类中的函数来访问派生类中的函数
- 无法访问派生类函数内的基类的受保护数据成员
- D 指针/pimpl 模式基类指针访问派生类成员
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?
- 访问派生类C++中的受保护成员
- 从C++中的"interface"访问派生类成员?
- 通过基类的指针,我们无法访问派生类特定的成员
- 抽象类的需求是什么?为什么要通过其基类访问派生类方法?在C++