2013-07-28 57 views
0

我想知道以下幾點:繼承的靜態函數可以訪問重寫的靜態私有數據成員嗎?

在static.h:

class Base 
{ 
    private: static const char* className; 

    public: static const char* getClass() { return className; }; 

}; 


class Sub : public Base 
{ 
    private: const static char* className; 
}; 

而且在static.cpp:

#include "static.h" 
#include <iostream> 

const char* Base::className = "Base"; 
const char* Sub ::className = "Sub"; 

int main() { std::cout << Sub::getClass(); } 

// outputs "Base" 

是否有可能繼承這樣的功能,並將它用一個被覆蓋的數據成員?

+3

成員變量在C++中的多態... –

+0

@OliCharlesworth所以永遠不要:) – aaronman

+0

爲什麼你會需要這個?你可以訪問'Base :: className'和'Sub :: className'就好了! –

回答

0

是的,但這不是「壓倒一切」,它實際上是「隱藏」。該類可以訪問它自己的私有成員,並且其數據成員隱藏在基類中使用相同名稱的聲明。