2016-02-06 72 views
3

我在派生類中有一個值,我想使用基類中的函數返回,這有可能嗎?或者我必須在基類中聲明變量才能這樣做?從派生類到基類的返回值

我只是在派生類中調用函數嗎?

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

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

回答

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

這是我正在尋找,謝謝我現在可以睡覺。 – 4tehlolxz

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

不應該這'虛擬INT getNum()const的摘要;''是虛擬INT getNum()const的= 0;'? –

+1

是的。 'abstract'在C++中不是關鍵字。 – Puppy