C++:从属性类调用顶级类方法
C++: call a top class method from the attribute class
我想从子类调用父类的方法。
代码如下:
#include "stdio.h"
class Parent;
typedef void (Parent::*fff)(void);
// Attribute class
class Child {
public:
Child( fff ftp );
void (Parent::*fptr)(void);
void update();
};
Child::Child( fff ftp )
{
fptr = ftp;
}
void Child::update()
{
(this->*fptr)(); // fail and I don't know the correct syntax
printf("update donen");
}
// Top class
class Parent {
public:
Parent();
Child child;
void foo();
};
Parent::Parent():
child( &Parent::foo )
{
(this->*child.fptr)(); // works and print "foo"
}
void Parent::foo()
{
printf("foon");
}
int main()
{
Parent parent;
parent.child.update();
}
此代码失败。我收到以下错误:"错误:指向成员类型'void(父级::)(('的指针与对象类型'子级'不兼容">
这可能很明显,但我找不到正确的语法。知道吗?
工作案例(删除不相关的细节(:
Parent::Parent()
// ^ (!)
{
(this->*child.fptr)();
}
this
的类型为Parent
,因此您可以使用它来调用Parent
函数。
非工作案例:
void Child::update()
// ^ (!)
{
(this->*fptr)();
}
this
的类型是Child
,但成员函数指针引用类Parent
,所以你有不匹配的参数类型(但这不是语法问题,这是正确的(。情况与以下情况相当:
class C
{
public:
static void f(C* c);
};
class D
{
public:
void f()
{
C::f(this); // fails, 'this' is not C*, but D*!
}
}
物质会改变,如果你让Child
继承Parent
.这是否合适取决于用例,但由于Child
已经是Parent
的聚合成员,因此在给定的场景中甚至是不可能的。
相关文章:
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 从基类实例调用派生类方法而不进行强制转换
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 函数从唯一代码调用正确的子类方法
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- C++:从属性类调用顶级类方法
- 指向类方法调用的指针
- 有没有办法从同一类中的函子调用类方法?
- 有没有办法禁止派生类中的基类方法调用?
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- 我可以从析构函数的类方法调用它吗
- C++指向类方法调用的指针
- 基类方法调用派生类方法,任何可能的解决方案
- 从基类方法调用虚拟方法
- 非常具体的子类方法调用
- 类方法调用是否会在for循环中进行优化
- 使用具有相同声明的类方法调用全局函数
- 如何在c++中实现抽象类,同时允许子类方法调用