在C++中,抽象類是一種特殊的類,它不能被直接實(shí)例化,而只能用作其他類的基類。抽象類通常用于定義接口和共享行為,而不關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié)。
抽象類通過在類定義中聲明純虛函數(shù)來定義。純虛函數(shù)是沒有實(shí)際實(shí)現(xiàn)的函數(shù),只有函數(shù)聲明,例如:
class AbstractClass {
public:
virtual void doSomething() = 0; // 純虛函數(shù)
virtual void doAnotherThing() = 0; // 純虛函數(shù)
};
上述代碼中,AbstractClass
是一個(gè)抽象類,它包含兩個(gè)純虛函數(shù) doSomething()
和 doAnotherThing()
。這些純虛函數(shù)沒有實(shí)際的實(shí)現(xiàn),只是用于定義接口。
任何繼承自抽象類的派生類都必須實(shí)現(xiàn)所有純虛函數(shù),否則派生類也會(huì)成為抽象類。例如:
class ConcreteClass : public AbstractClass {
public:
void doSomething() override {
// 實(shí)現(xiàn)具體的行為
}
void doAnotherThing() override {
// 實(shí)現(xiàn)具體的行為
}
};
ConcreteClass
是一個(gè)具體類,它繼承自 AbstractClass
并實(shí)現(xiàn)了所有的純虛函數(shù),因此它可以被實(shí)例化和使用。
抽象類的主要作用是提供一個(gè)通用的接口和行為定義,使得派生類在實(shí)現(xiàn)時(shí)必須遵循一定的約束。它們?cè)诿嫦驅(qū)ο笤O(shè)計(jì)中常用于實(shí)現(xiàn)多態(tài)性和代碼重用。