2014-01-16 28 views
0

我正在使用c + +,我不知道如何使用派生類訪問我的基類中的變量。 我需要得到的值在基類和派生類中做的操作,因爲在基類中的所有功能,包括參數,當我打電話的功能,有沒有一種方法可以使用派生類訪問基類中的值?

例如:

Baseclass.getvalue(); 

由於沒有定義,我不能放任何參數。

我已經做了的構造部件,如

class derivedclass:baseclass 
{ 
//insert functions here. 
}; 

derivedclass::derivedclass() 
    :baseclass() 
{ 
//insert initialization here 
} 

,但我仍然無法訪問該值。幫幫我?我需要使用虛擬嗎?如果是的話,怎麼樣?

*這是一個用戶定義的程序

+1

請顯示您希望訪問的值的聲明。請記住,它們需要受到保護或公開才能被子類訪問。 – dasblinkenlight

+0

給出函數的具體示例,基類中的「值」,如何嘗試訪問它以及失敗。 – Peter

+1

看起來像作業 –

回答

3

簡單地訪問(publicprotected)值,好像他們是派生類的一部分。

class baseclass { 
    protected: 
     int m_value; 
    public: 
     baseclass(); 
     virtual int getvalue(); 
}; 

class derivedclass : public baseclass { 
    void dosomething(void) { 
    // whoa: `m_value` is part of `baseclass`, and we can simply access it here! 
    std::cout << "value: " << m_value << std::endl; 

    // we can also use `getvalue()` 
    std::cout << "getvalue(): " << getvalue() << std::endl; 
    } 
}; 
+0

提供它是'public'或'protected',如果它是'private',則派生類將無法訪問。 –

+0

@ T.Kiley是的,這就是爲什麼我在回答中提到'public'和'protected'的原因。 –

+0

對不起,在評論時沒有:) –

1

在這種情況下,繼承是私有的,所以基礎子對象及其成員只能在派生類及其朋友中訪問。默認情況下,如果通過關鍵字class引入類定義並且使用struct關鍵字公開類,則成員和基類是私有的。如果你想從外部訪問它們,那麼你就需要公有繼承:

class derivedclass : public baseclass {/*...*/}; 

struct derivedclass : baseclass {/*...*/}; 

如果派生類不通過聲明的成員具有相同的名稱隱藏成員,您可以像訪問類的成員那樣訪問它。 (如果繼承是受保護的或私有的,那麼它將在派生類中受到保護或私有,因此可能無法訪問)。

如果它是隱藏的,你特別希望基類的版本,那麼你就需要來限定成員名稱:

Derived.baseclass::getvalue() 

,但如果是這樣的話,那麼就將會在什麼時髦而類接口可能需要重新思考。

相關問題