c ++派生函数与基函数

时间:2012-03-05 20:05:58

标签: c++ function derived-class base-class

有没有办法可以根据派生的类来调用基类的成员函数?

Class Bass{
    public:
        void func();
};

Class Derived: public Base{
    public:
        void func();
};

我有一个练习中期,我怀疑没有,因为基础课怎么会知道Derived,但我不确定。

5 个答案:

答案 0 :(得分:2)

  

有没有办法可以根据派生的类来调用基类的成员函数?

不确定这是什么意思,但鉴于您的BaseDerived课程,您可以执行以下操作。只需确保使用引用或指针,而不是因为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的派生版本。

这就是你问的问题吗?