子類和子類之間有什麼區別,以及如何判斷一個類是否是另一個類的子類/子類?子類和子類有什麼區別?
回答
來源:http://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/node12.html
有支持重用亞型和子類之間的重要區別。子類允許重用類內的代碼 - 實例變量聲明和方法定義。因此它們在支持類內的代碼重用方面很有用。另一方面,子類型有助於支持外部重用,從而產生多態的形式。也就是說,一旦數據類型被確定爲另一類型的子類型,則可應用於超類型的元素的任何函數或過程也可以應用於子類型的元素。
您應該閱讀完整的文章。
就像下面的問題所指出的那樣,這個術語在C++中並不典型 - 您不應該使用它,否則會冒着讓人困惑的風險。 –
特別是因爲C++不是「唯一」的面向對象,所以有模板這樣的東西 - 它可以「適用於任何函數或過程」,支持它的任何類型,作爲公共基類的子類型/子類。因此,在嘗試將學術術語應用於現實生活時要小心。 – DevSolar
C++將子類稱爲「派生類」。
在C++中,類是類型,唯一的「子類型」是派生類。所以如果你選擇使用與C++有關的「subtype」和「subclass」這兩個詞,它們可能是同一個東西。根據你的學術背景,我想你可能會說私人繼承不是創建一個子類型,在這種情況下它們是不同的。對於這個問題,在一些學術語境中,「子類型」的概念是不合法的(形式類型理論在面向對象之前就存在了,在計算機科學之前,除非你指望巴貝奇)。
在C++ 11可以測試是否AClass
被派生類的Another
(任選地排除其中它們是相同的類的情況下):
std::is_base_of<Another, AClass>::value && !std::is_same<Another, AClass>::value
該表達式爲真,即使繼承私人的。
我認爲「const T *」是「T *」的子類型 –
然後根據「子類型」的合適定義編寫答案:-) –
類是由程序員定義的新類型,所以我認爲子類==子類型。
史蒂夫傑索普寫道:
C++是指一個子類爲 「派生類」。
我認爲沒有。子類是類內的類(如引擎是汽車的一部分)。
請看下面的例子:
#include <iostream>
using namespace std;
class Car
{
public:
class Engine //Engine is subclass
{
public:
static void Start()
{
cout << "Engine is starting... \n";
}
};
};
class Animal
{
public:
static void Eat()
{
cout << "Animal is eating... \n";
}
};
class Wolf : Animal //Wolf is derived class
{
public:
static void Howl()
{
cout << "Wolf is howling... \n";
}
};
int main()
{
Car::Engine::Start();
Animal::Eat();
Wolf::Howl();
system("PAUSE"); //keep Console Window open in Debug Mode
return 0;
}
您對_nested classes_產生混淆。 – AProgrammer
對不起。我來自波蘭,我不知道「嵌套」這個詞。 – David
那些是理論概念,而不是C++之一。但讓我們看看它們如何應用於C++。
繼承通過從另一繼承指的是新類型的形成。 C++提供該機制並調用子類「派生類」。
子類型指在預期類型值的地方使用子類型值的可能性。在C++中,你可以認爲公有繼承意味着一種子類型關係,或者你可能更具限制性,並且只考慮虛擬函數覆蓋確保尊重LSP的情況。考慮到私有或受保護的繼承沒有(但仍然是子類化的情況)是合理的,無論您是否使用虛擬函數覆蓋。
所以,像往常一樣,精確的定義 - 我故意給無 - 使用將接受或排除某些極端情況(在C私人或受保護的基類++),甚至是整個域(你考慮類型模板參數必須符合一個鍵入系統的約束條件?如果您的定義足夠開放以適用於很多語言,那麼您最終可能會回答yes,因此認爲C++有兩個輸入系統和相互作用。現在考慮明確的專業化對第二個的影響。)通常會做出精確的定義,以便緩解他們提出的其餘工作。
- 1. 子類和類別之間的區別?
- 2. Debug類和Trace類有什麼區別?
- 3. ConfigurationManager類和Settings類有什麼區別?
- 4. HostingEnvironment類和HttpRuntime類有什麼區別?
- 5. java.awt.Rectangle類和java.awt.geom.Rectangle2D.Double類有什麼區別?
- 6. 子類型和包含有什麼區別?
- 7. 耙子任務和工人類有什麼區別?
- 8. 插座和襪子有什麼區別?
- 9. 帖子和頁面有什麼區別
- 10. 「原子」和「cstdatomic」有什麼區別?
- 11. 叉子和線程有什麼區別?
- 12. Firebase - ref和孩子有什麼區別?
- 13. 函子和「泛型」有什麼區別
- 14. 鉤子和回調有什麼區別?
- 15. 這些例子(*和&)有什麼區別?
- 16. wxPythons Super方法和子類化按鈕之類的控件有什麼區別?
- 17. Django的類別,子類別和子子類別
- 18. MySql,產品的可選類別,子類別和子子類別
- 19. 類別和子類
- 20. 子類和類別
- 21. 父類別和子類別帖子
- 22. 類別和子類別與種子.rb
- 23. Syncano類和SyncanoDashboard有什麼區別?
- 24. gRPC和Beta gRPC類有什麼區別?
- 25. 抽象類和Mixin有什麼區別?
- 26. Helper和Utility類有什麼區別?
- 27. 聚類和匹配有什麼區別?
- 28. CommaIO和Comma7IO類有什麼區別?
- 29. super()和Parent類名有什麼區別?
- 30. 類別和子類別
在C++中沒有這樣的東西 – 2012-12-04 10:32:08