日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++纯虚函数与抽象类

發(fā)布時間:2025/3/15 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++纯虚函数与抽象类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

純虛函數(shù)

1.1純虛函數(shù)是在聲明虛函數(shù)時被“初始化”為0的函數(shù)。聲明純虛函數(shù)的一般形式為: virtual 函數(shù)類型 函數(shù)名 (參數(shù)列表) =0; 如 virtual float area() const =0; 1.2純虛函數(shù)沒有函數(shù)體,而且這是一個聲明語句后面應有分號。 1.3純虛函數(shù)最后面的“=0”并不表示返回值為0,它只是起形式上的作用,告訴編譯器這是純虛函數(shù)。 1.4純虛函數(shù)的作用是在基類中為其派生類保留一個函數(shù)的名字,以便派生類型根據(jù)需要對它進行定義。 1.5如果在一個類中定義了純虛函數(shù),而在其派生類中沒有對該函數(shù)定義,則該虛函數(shù)在派生類中仍為純虛函數(shù)。

抽象類

1.1什么是抽象類? 一種不用來定義對象而用來作為一種基本類型而作為繼承的類,稱為抽象類,由于它常作為基類,故又稱為抽象基類。 1.2凡是包含純虛函數(shù)的類都是抽象類。因為純虛函數(shù)是無法調用的,包含純虛函數(shù)的類是無法建立對象的。 1.3往往一些好的面向對象的系統(tǒng),其頂部是一個抽象類,甚至頂部有好幾層抽象類。 1.4如果派生類對基類的所有純虛函數(shù)進行了定義,那么這些函數(shù)就被賦予了功能,可以被調用,這個派生類就不是抽象類,而是具體的類。 1.5一段代碼: #include <iostream> using namespace std; class Shape { public: virtual float area() const{return 0;} virtual float volume() const{return 0;} virtual void shapeName() const=0; }; class Point:public Shape { public: Point(float a=0,float b=0); void setPoint(float a,float b); float getX() const {return x;} float getY() const {return y;} virtual void shapeName() const {cout << "Points" << endl;} friend ostream& operator << (ostream& output,Point& p); protected: float x,y; }; Point::Point(float a, float b) { x=a; y=b; } void Point::setPoint(float a, float b) { x=a; y=b; } ostream& operator << (ostream& output,Point& p) { output << "[" << p.getX() << "," << p.getY() << "]" << endl; return output; } class Circle:public Point { public: Circle(float a,float b,float r):Point(a,b),radius(r){} void setRadius(float r); float getRadius() const {return radius;} virtual float area() const ; virtual void ShapeName() const {cout << "Circle" << endl;} friend ostream& operator << (ostream& output,Circle &c); protected: float radius; }; void Circle::setRadius(float r) { radius=r; } float Circle::area() const { return 3.14159*radius*radius; } ostream& operator << (ostream& output,Circle &c) { output << "Center [" << c.x << "," << c.y << "] radius=" << c.radius << " area=" << c.area() << endl; return output; } class Cylinder:public Circle { public: Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){} void setHeight(float h){height=h;} float getHeight() const{return height;} virtual float area() const; virtual float volume() const; virtual void ShapeName() const {cout << "Cylinder" << endl;} friend ostream& operator << (ostream& output,Cylinder& cy); protected: float height; }; float Cylinder::area() const { return 2*Circle::area()+2*3.14159*radius*height; } float Cylinder::volume() const { return Circle::area()*height; } ostream& operator << (ostream& output,Cylinder& cy) { output << "Center [" << cy.getX() << "," << cy.getY() << "] r=" << cy.radius << "\narea=" << cy.area() << " volume=" << cy.volume() << endl; return output; } int main() { Point p(1,2); Circle cir(1,2,3); Cylinder cy(1,2,3,4); cout <<"Cylinder\n" << "Center [" << cy.getX() << "," << cy.getY() << "] r=" << cy.getRadius() << "\narea=" << cy.area() << " volume=" << cy.volume() << endl; cy.setHeight(1); cy.setPoint(2,3); cy.setRadius(4); cout << "Cylinder\n" << cy << endl; Point &px=cy; cout << "Point\n" << px; Circle &c=cy; cout << "Circle\n" << c; Shape *pt=&p; pt->shapeName(); cout << "area=" << pt->area() << " volume=" << pt->volume() << endl; pt=&cir; pt->shapeName(); cout << "area=" << pt->area() << " volume=" << pt->volume() << endl; pt=&cy; pt->shapeName(); cout << "area=" << pt->area() << " volume=" << pt->volume() << endl; return 0; } 1.6一個基類如果包括一個或一個以上的純虛函數(shù),就是抽象基類。抽象基類不能也不必要定義對象。 1.7抽象基類與普通基類不同,它一般不是現(xiàn)實存在的類的抽象,它可以沒有任何物理意義上或其它實際意義方面上的含義。 1.8在類的層次機構中,頂層或最上面的幾層可以是抽象基類。 1.9抽象基類是本類族的公共接口。 2.0區(qū)別靜態(tài)關聯(lián)和動態(tài)關聯(lián)。 2.1如果在基類聲明了虛函數(shù),則在派生類中凡是與該函數(shù)有相同的函數(shù)名,函數(shù)類型,參數(shù)個數(shù)與參數(shù)類型的函數(shù),均為虛函數(shù)(不論在派生類中是否用virtual聲明)。 2.2使用虛函數(shù)提高了函數(shù)的可擴充性。

總結

以上是生活随笔為你收集整理的C++纯虚函数与抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。