繁体   English   中英

从Derived类返回值到Base类

[英]Return value from Derived class to Base class

我在派生类中有一个值,我希望使用基类中的函数返回,这可能吗? 或者我必须在基类中声明变量才能这样做?

我只是在派生类中调用该函数吗?

class Base
{
    public:
        int getNum() const { return number; }
};

class Derived : public Base
{
    private:
        int n = 50;
};

我在派生类中有一个值,我希望使用基类中的函数返回,这可能吗?

是的,您可以使用传递给基类构造函数的引用,如下所示:

class Base
{
    public:
        Base(int& number_) : number(number_) {} 
        int getNum() const { return number; }
    private:
        int& number;
};

class Derived : public Base
{
    public:
        Derived() : Base(n) {}
    private:
        int n = 50;
};

另一种方法(不使用virtual getNum() const; )使用模板化基类(又名静态多态):

template <typename D>
class Base
{
    public:
        int getNum() const { return static_cast<D*>(this)->getNum(); }
};

class Derived : public Base<Derived>
{
    public:
        Derived() {}
        int getNum() const { return n; }
    private:
        int n = 50;
};

这样做的方法是通过虚拟功能。 基类不能直接访问派生类成员,但它可以访问派生类上定义的方法,如果它们是如下定义的虚方法:

class Base
{
public:
    virtual int getNum() const = 0;
};

class Derived : public Base
{
public:
    virtual int getNum() const {
        return n;
    }
private:
    int n = 50;
};

这是一个用法示例:

int main() {
    Base* b = new Derived;
    std::cout << b->getNum();
    delete b;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM