c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充
在C++中,繼承是一個對象自動獲取其父對象的所有屬性和行為的過程。通過繼承,您可以重用,擴展或修改在其他類中定義的屬性和行為。通過繼承,可以實現函數重寫以及多態。
在C++中,繼承另一個類的成員的類稱為派生類,其成員被繼承的類稱為基類。 派生類是基類的子類。
繼承代表了 is a 關系。例如,哺乳動物是動物,狗是哺乳動物,因此,狗是動物,等等。
C++最強大的功能之一就是派生類的使用。通過其類提供類和對象的更一般的屬性和行為,通過派生類來逐步特殊化、具體化,體現出一種層次化的關系。既能達到代碼重用,還可添加成員或重寫成員函數。繼承一般有三種形式1) 實現繼承:派生類使用基類的屬性和方法而無需額外編碼;2) 可視繼承:子窗體使用父窗體的外觀和實現代碼;3) 接口繼承:僅使用屬性和方法,實現滯后到子類實現;如C++的輸入輸出流類就能會很地體現這種繼承和派生的層次關系:
定義一個派生類,我們使用一個類派生列表來指定基類。類派生列表以一個或多個基類命名,形式如下:
class derived-class: access-specifier base-class其中,訪問修飾符 access-specifier可以是 public、protected 或 private 其中的一個,base-class 是之前定義過的某個類的名稱。如果未使用訪問修飾符 access-specifier,則默認為 private。
實例:
#include using namespace std;// 基類class Shape{public:void setWidth(int w){width = w;}void setHeight(int h){height = h;}protected:int width;int height;};// 派生類class Rectangle: public Shape{public:int getArea(){return (width * height);}};int main(void){Rectangle Rect;Rect.setWidth(5);Rect.setHeight(7);// 輸出對象的面積cout << "Total area: " << Rect.getArea() << endl;system("pause");return 0;}//輸出:Total area: 351 訪問控制和繼承
派生類可以訪問基類中所有的非私有成員。因此基類成員如果不想被派生類的成員函數訪問,則應在基類中聲明為 private。
我們可以根據訪問權限總結出不同的訪問類型,如下所示:
2 派生類不能繼承的函數成員
一個派生類繼承了所有的基類方法,但下列情況除外:
- 基類的構造函數、析構函數和拷貝構造函數。
- 基類的重載運算符。
- 基類的友元函數。
用派生的方法定義一個派生類時,派生類對象中的基類部分必須在構造函數的初始化列表中調用基類的構造函數完成,如:
#include
#include
//代碼清單12-11 派生類定義實例car派生taxi
class car {
char no[10];
char owner[10];
char type[20];
public:
car(char *s1, char *s2, char *s3)
{
strcpy(no, s1);
strcpy(owner, s2);
strcpy(type, s3);
}
void modifyNo(char *s) {strcpy(no, s); }
void modifyOwner(char *s) {strcpy(owner, s); }
const char *getNo() const { return no; }
const char *getOwner() const {return owner; }
const char *getType() const { return type; }
};
class taxi : public car {
int seat;
double price;
public:
taxi(char *s1, char *s2, char *s3, int s, double p):car(s1,s2,s3)
{seat = s; price = p; }
double operator() (int start, int end)
{ return price *(end-start); }
int getSeat() const {return seat; }
double getPrice() const { return price; }
};
int main()
{
car car1("滬A01100
總結
以上是生活随笔為你收集整理的c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玛玛订婚
- 下一篇: ArcGIS将CAD等高线转换为TIN/