我正在學習繼承的概念,特別是關於訪問說明符,在這裏我對protected
訪問說明符感到困惑。被保護的成員可以被基類成員函數和派生類成員函數訪問。如果我們聲明protected爲訪問說明符,則可能會搞亂基類的implementation
。它總是更好地申報private
下的數據成員,而不是保護,因爲只有interface
公開,而不是implementation
部分。我們只聲明一個類的私有部分中的變量以及它如何變成implementation
?實施將在member functions
完成嗎?條款很混亂,任何人都可以澄清並解釋我的條款?C++中的接口與實現。這是什麼意思?
回答
接口和實現並不是特定於C++的想法,它聽起來像是對什麼接口和實現是一般感到困惑,所以希望通過解釋它們是什麼將會更容易在C++中理解它。
This SO question(雖然不完全是你問)有一個接口是什麼一個很好的定義:
接口是合同:這傢伙寫的接口說,「哎,我接受這樣看待的東西「,而使用界面的人說:」好吧,我寫的課程就是這樣看的「。
一個接口是一個空殼,只有方法的簽名,這意味着方法沒有一個主體。界面不能做任何事情。這只是一種模式。
而在他的實施例的接口被(翻譯成C++):
class MotorVehicle
{
public:
virtual void run() const = 0;
virtual int getFuel() const = 0;
}
然後是實施是:
class Car : public MotorVehicle
{
int fuel;
public:
void run() const override
{
printf("Wrroooooooom\n");
}
int getFuel() const override
{
return this->fuel;
}
}
的實施是實際想法背後的物質 ,接口的實際定義將如我們所期望的那樣。另一個例子:就算法而言,我們討論的是深度優先搜索(DFS),它具有明確定義的行爲,但我們如何代碼或實現,算法可以變化。例如,我們可以使用遞歸或堆棧數據結構。
現在作爲訪問說明符:使用protected
訪問不錯。我們將繼承作爲一個「is-a」的關係來討論。當我們說Cat
繼承自Animal
時,我們也說Cat
是Animal
。所以對於Cat
來說使用Animal
的一些實例變量是完全正常的,因爲應該無論如何都屬於Cat
。
你擔心子類會通過改變實例變量來搞亂超類的功能。你當然可以通過從子類中拋出無意義的數據來做到這一點,但通常你不這樣做。你可以使用實例變量作爲他們想要使用的超類(否則你確實會搞砸功能),這應該被記錄下來。如果您仍然認爲有人不應該使用您的實例變量,那麼這就是private
說明符的用途。
最後一件事:重寫超類方法還應該防止濫用超類變量。通過訪問和寫入protected
變量,您可能會將超類方法的行爲更改爲不希望的東西,但是應該重寫這些方法以執行您的子類打算執行的新操作。
聽起來他對一般的界面和實現有些困惑,所以我想我會回答這個問題。我應該將引用的示例更改爲C++嗎? –
_「我應該將引用的示例更改爲C++嗎?」_是的,這樣會更好,其他所有內容都會讓未來的訪問者感到困惑。 –
- 1. 實現是什麼意思?
- 2. 這是什麼意思? [c#]
- 3. 這是什麼意思-c
- 4. 這是什麼意思 - C#
- 5. 「程序接口,不是實現」是什麼意思?
- 6. C中的shellcode - 這是什麼意思?
- 7. 這是什麼打字稿接口語法是什麼意思?
- 8. 這個接口定義中的尖括號是什麼意思?
- 9. Java的實現是什麼意思?
- 10. 這是什麼C++代碼的意思
- 11. JRuby是在JVM上實現的Ruby--這是什麼意思?
- 12. C中##是什麼意思?
- 13. 這個鏈接是什麼意思?
- 14. 這是什麼意思在Objective-C
- 15. 這個C宏是什麼意思?
- 16. 這個C++語法是什麼意思?
- 17. 這個C#聲明是什麼意思?
- 18. 這個C++代碼是什麼意思
- 19. 這是什麼意思在C++
- 20. 這個C代碼是什麼意思?
- 21. C++,這個語法是什麼意思?
- 22. C struct:這是什麼意思?
- 23. C++ Biginteger,這是什麼意思?
- 24. 這個C++函數是什麼意思?
- 25. %* c in scanf() - 這是什麼意思?
- 26. 這個C++代碼是什麼意思?
- 27. 這些C#代碼是什麼意思?
- 28. 這個C宏是什麼意思?
- 29. 這個C++語句是什麼意思?
- 30. 這個C習語是什麼意思?
提供評論atleast而不是down-voting: -/ –
受保護的成員函數可能適用於子類可能需要的實用類型函數,但仍然不公開。它們也可以用於父類調用的虛函數,然後在子類中重寫,以提供一些特定但尚未公開的操作。 –
如果你使用它們,這些想法會變得更加清晰。現在你的問題不是很清楚。 – doctorlove