有没有办法可以根据派生的类来调用基类的成员函数?
Class Bass{
public:
void func();
};
Class Derived: public Base{
public:
void func();
};
我有一个练习中期,我怀疑没有,因为基础课怎么会知道Derived,但我不确定。
答案 0 :(得分:2)
有没有办法可以根据派生的类来调用基类的成员函数?
不确定这是什么意思,但鉴于您的Base
和Derived
课程,您可以执行以下操作。只需确保使用引用或指针,而不是因为slicing problem而使用值传递。
在Base::func()
内致电Derived::func()
:
void Derived::func()
{
Base::func();
}
在Base::func()
对象上明确调用Derived
:
Derived d;
d.Base::func();
我想知道你是否可以做
之类的事情Base::func(Derived d)
正如其他人所指出的那样,你可以使用前瞻声明来做到这一点:
// Tell the compiler "Derived" is a class name.
class Derived;
class Base
{
// Can use the class name since it has been declared.
void func(Derived& derived);
};
// Define the class named "Derived".
class Derived : public Base
{
// ...
};
// Use the derived class.
void Base::func(Derived& derived)
{
// For this bit to work, the definition of `Derived` must
// be visible at this point (like putting the class above
// or including your "Derived.h" from "Base.cpp").
derived.some_derived_method();
}
但是,您无法直接在类定义中定义Base::func(Derived&)
,因为您需要先完成Base
的定义并首先定义Derived
。
答案 1 :(得分:1)
如果我理解正确,你需要用派生参数调用基函数吗? 您只能使用前向声明并通过指针或参考传递派生对象来执行此操作。
class Derived;
class Base{
public:
void func(Derived&);
};
答案 2 :(得分:0)
你应该可以这样做:
class Derived;
class Base {
public:
void func();
void func(Derived);
};
class Derived : public Base {
public:
void func();
};
void
Base::func(Derived D) {
}
可以在Base的成员函数声明中使用不完整的类型,但必须在定义之前提供完整的类型。
答案 3 :(得分:0)
您可以使用派生类的前向声明:
class Derived;
答案 4 :(得分:-1)
首先,你的意思是对象的方法,还是静态类方法?
其次,答案是:它取决于您调用方法调用的对象是什么。这就是多态性的本质:如果你的对象属于' Derived',那么即使它被转换为' Base'方法调用仍将调用func的派生版本。
这就是你问的问题吗?