从Derived类返回值到Base类

时间:2016-02-06 11:48:40

标签: c++ class oop

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

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

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.******.***"
        minSdkVersion 21
        targetSdkVersion 22
        multiDexEnabled true     }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories { mavenCentral() }

dependencies {
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.google.android.gms:play-services:+'
    compile files('libs/httpmime-4.1.1.jar')
    compile files('libs/ormlite-android-4.43.jar')
    compile files('libs/ormlite-core-4.43.jar')
}

2 个答案:

答案 0 :(得分:3)

  

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

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

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;
};

答案 1 :(得分:1)

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

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;
}