回答
派生類需要私有成員,即使它不能直接訪問它們。否則,行爲不會建立在它所源自的類上。
例如,假裝的私人東西是:
int i;
和類具有GETI()和SETI()。我的價值必須放在某個地方,即使它是私人的,
主席先生我承認,很少遇到這樣一個優雅和真棒的答案。謝謝你,先生,這個答案,特別是最後一行:)) – 2016-03-04 22:42:04
派生類不以任何方式「繼承」基類的私有成員 - 它無法訪問它們,因此它不會「繼承」它們。
由於顯而易見的原因,派生類的實例包含基類的私有成員的實例。
所以我甚至不知道你的意思是這個問題。
「派生類不會」繼承「基類的私有成員」是的,除非您試圖分割語法頭髮。 – 2010-01-06 22:14:50
我認爲通過「繼承」他的意思是「可以訪問」 - 這是對問題最無意義的解釋。 – 2010-01-07 01:11:07
基類的public和protected方法仍然可以訪問基類的private變量,並且這些方法在派生類中可用。
基類仍然可以使用私有成員變量&方法。
如果您希望派生類可以訪問成員,但不讓外部世界隱藏這些成員,請將它們設爲protected:
。
下面是一個例子來說明:
class Base
{
public:
Base() : val(42.0f) {};
float GetValue() const
{
return val_;
}
private:
float val_;
};
class Derived : public Base
{
public:
float ComputedValue() const
{
return GetValue() * 2.0f;
}
};
不要忘了基類可能具有不private
方法,從而由派生類訪問。那些protected
或public
基類方法仍然可以調用private
基類方法。如果要鎖定核心功能在基類中,如用Template Method設計模式實現這一點特別有用:
class base
{
public:
virtual ~base() { /* ... */ }
virtual void base_func() { foo_private(); }
virtual void do_func() = 0;
private:
void foo_private()
{
// pre-do_func() operations
do_func();
// post-do_function operations
}
};
class derived : public base
{
public:
void derived_func() { base_func(); }
virtual void do_func()
{
// Derived class specific operations
}
};
正如其他的答案在這裏被列出,派生類語法無法訪問基類的私人成員;但它需要在其內存佈局中具有相同的副本。考慮鑄造。使用'C'角色,你可以派生派生到私人基地。然後,編譯器需要正確的內存偏移量,以便爲基礎對象生成有效的內存佈局。
Ex。
class Base {
public:
void printA() {
a = 10;
std::cout << a << std::endl;
}
private:
int a;
};
class Derived : private Base{
int b;
};
Derived* d = new Derived;
Base* b = (Base*)d;
b->printA();
當派生類對象被創建時,基類構造函數也被稱爲創建基類對象。如果基類的私有成員未分配內存,則基礎對象將不完整。
因此,派生類對象會繼承基類的私有成員,因爲它們是在創建基類對象期間創建的,但由於它們是私有對象而無法訪問。
雖然私有成員不能從基類訪問,但它們被它們繼承,因爲這些屬性是由非私有函數幫助的派生類使用的。
基類的私有成員不是直接訪問的,而是由派生類的基類派生的。
- 1. 從基類繼承私有成員到派生類C++
- 2. 基類的私有成員是否始終在C++的派生類中繼承?
- 3. C++ - 派生類是否繼承基類的靜態成員?
- 4. 派生類可以訪問其基類的私有成員
- 5. C#繼承。從基類派生類
- 6. 爲什麼基類私有屬性被派生類訪問?
- 7. 爲什麼基類的成員與派生類中的同一成員不同?
- 8. C#繼承 - 爲派生類添加受保護的成員
- 9. 爲什麼我可以通過派生對象的基類指針訪問派生的私有成員函數?
- 10. 具有私有繼承的派生類中的朋友函數
- 11. C++派生類訪問基類成員
- 12. 繼承和私有成員
- 13. 如何從基類公開繼承,但是派生類中的基類有一些私有的公共方法?
- 14. 繼承,從派生類派生
- 15. C#:繼承單獨的靜態成員的派生類
- 16. 基類的私有數據成員如何被派生類訪問?
- 17. 如何在派生類中訪問基類的私有數據成員?
- 18. 爲什麼派生類不能訪問受保護的基類成員?
- 19. 我可以讓派生類在Java中從其基類繼承派生成員嗎?
- 20. 指向基礎類和私有繼承
- 21. 在派生類中實現虛函數時訪問基類私有成員
- 22. C++聯基類成員派生類成員
- 23. 訪問基類成員中派生
- 24. Qt - 派生類是否繼承其基類的元屬性?
- 25. 派生類不繼承基類的重載方法
- 26. C++繼承的基類派生使用類
- 27. 訪問從基類指針派生的私有成員函數派生類對象
- 28. 初始化基類的常量成員的成派生類
- 29. 在派生類中爲成員變量使用派生類型
- 30. 獲取派生類不繼承基類函數
你正在學習C++的書不得不在這個問題上說些什麼? – 2010-01-06 21:35:30