我在派生类中有一个值,我希望使用基类中的函数返回,这可能吗?或者我必须在基类中声明变量才能这样做吗?
我是否只需在派生类中调用该函数?
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')
}
答案 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;
}