c++在参数中将子类方法传递给基类方法
c++ pass child class method to base class method in argument
我有一个基类,它有一个方法,该方法以方法指针(类函数指针)作为参数。我从这个基类派生出一个子类。然后我想把子类的一个方法传递给基类的方法。
一个例子:
class Base1
{
public:
void BaseMethod(void (Base1::*basemth)(/*arguments list A*/),
double a)){/*definition*/}
};
class Derived1 : public Base1
{
public:
void ChildMethod(/*arguments list A*/)
void ChildMethod2()
{
double double_a = 1.0;
void (Derived1::*pntr)(/*arguments list A*/);
pntr = &Derived1::ChildMethod;
BaseMethod(pntr, double_a); //<---- this fails
}
};
我得到"error: no matching function for call to…"
这可能吗?如果是,我做错了什么?任何帮助都将不胜感激。我已经查看了指向方法父参数的子类方法指针c++,但遵循R Sahu的方法似乎不起作用,而Slava的答案似乎不相关(我没有从父实例调用子方法)。
这可能吗?
如果您使用virtual
成员函数,这是可能的,并且应该可以正常工作。如果使用非虚成员函数,它将不起作用。
示例程序:
#include <iostream>
class Base1
{
public:
void BaseMethod(void (Base1::*basemth)(), double a)
{
(this->*basemth)();
}
virtual void Method2() = 0;
};
class Derived1 : public Base1
{
public:
void Method2()
{
std::cout << "In Derived1::Method2()n";
}
void ChildMethod2()
{
double double_a = 1.0;
BaseMethod(&Base1::Method2, double_a);
}
};
int main()
{
Derived1 d;
d.ChildMethod2();
}
输出:
In Derived1::Method2()
相关文章:
- 使用子类覆盖基类中定义的函数
- 如何基于模板化类的基类专门化成员函数
- 永久更改派生类的基类?
- C++初始化之前派生类调用基类的方法
- 如何从派生类访问基类中的重载运算符?
- CRTP 如何使派生类具有基类的容器
- 如何删除派生类中基类对象的新对象
- 是否可以从派生类返回基类的实例?
- C ++中有没有办法让派生类重写基类静态方法
- C++多态性模板类:调用基类方法而不是派生类
- 从派生类实现基类构造函数专用化的替代方法是什么
- C++-从方法基类调用派生类中的重写方法
- 从基类调用基类中不存在的派生方法
- c++中没有从派生类调用基类方法的匹配函数
- C++派生类调用基类方法给出了分段错误
- 子类调用基类构造函数,然后使用子类Arduino c++中基类的实例方法
- 通过多级继承从模板子类调用基类的模板方法
- 如果派生类重写基类方法,为什么要调用基类方法
- 在c++中是否可以从派生类调用基类中的方法?
- 需要从c++中的派生类调用基类析构函数方法