c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充
在C++中,繼承是一個(gè)對(duì)象自動(dòng)獲取其父對(duì)象的所有屬性和行為的過程。通過繼承,您可以重用,擴(kuò)展或修改在其他類中定義的屬性和行為。通過繼承,可以實(shí)現(xiàn)函數(shù)重寫以及多態(tài)。
在C++中,繼承另一個(gè)類的成員的類稱為派生類,其成員被繼承的類稱為基類。 派生類是基類的子類。
繼承代表了 is a 關(guān)系。例如,哺乳動(dòng)物是動(dòng)物,狗是哺乳動(dòng)物,因此,狗是動(dòng)物,等等。
C++最強(qiáng)大的功能之一就是派生類的使用。通過其類提供類和對(duì)象的更一般的屬性和行為,通過派生類來逐步特殊化、具體化,體現(xiàn)出一種層次化的關(guān)系。既能達(dá)到代碼重用,還可添加成員或重寫成員函數(shù)。繼承一般有三種形式1) 實(shí)現(xiàn)繼承:派生類使用基類的屬性和方法而無需額外編碼;2) 可視繼承:子窗體使用父窗體的外觀和實(shí)現(xiàn)代碼;3) 接口繼承:僅使用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn);如C++的輸入輸出流類就能會(huì)很地體現(xiàn)這種繼承和派生的層次關(guān)系:
定義一個(gè)派生類,我們使用一個(gè)類派生列表來指定基類。類派生列表以一個(gè)或多個(gè)基類命名,形式如下:
class derived-class: access-specifier base-class其中,訪問修飾符 access-specifier可以是 public、protected 或 private 其中的一個(gè),base-class 是之前定義過的某個(gè)類的名稱。如果未使用訪問修飾符 access-specifier,則默認(rèn)為 private。
實(shí)例:
#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);// 輸出對(duì)象的面積cout << "Total area: " << Rect.getArea() << endl;system("pause");return 0;}//輸出:Total area: 351 訪問控制和繼承
派生類可以訪問基類中所有的非私有成員。因此基類成員如果不想被派生類的成員函數(shù)訪問,則應(yīng)在基類中聲明為 private。
我們可以根據(jù)訪問權(quán)限總結(jié)出不同的訪問類型,如下所示:
2 派生類不能繼承的函數(shù)成員
一個(gè)派生類繼承了所有的基類方法,但下列情況除外:
- 基類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝構(gòu)造函數(shù)。
- 基類的重載運(yùn)算符。
- 基類的友元函數(shù)。
用派生的方法定義一個(gè)派生類時(shí),派生類對(duì)象中的基類部分必須在構(gòu)造函數(shù)的初始化列表中調(diào)用基類的構(gòu)造函數(shù)完成,如:
#include
#include
//代碼清單12-11 派生類定義實(shí)例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
總結(jié)
以上是生活随笔為你收集整理的c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玛玛订婚
- 下一篇: java 析构函数_C++虚函数