你說的是c++的抽象類
我們提供的服務有:網站設計制作、做網站、微信公眾號開發(fā)、網站優(yōu)化、網站認證、云州ssl等。為上1000+企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的云州網站制作公司
純虛函數和抽象類
純虛函數是一種特殊的虛函數,它的一般格式如下:
class 類名
{
virtual 類型函數名(參數表)=0;
…
};
在許多情況下,在基類中不能對虛函數給出有意義有實現,而把它說明為純虛函數,它的實現留給該基類的派生類去做。這就是純虛函數的作用。下面給出一個純虛函數的例子。
#include
class point
{
public:
point(int i=0, int j=0) { x0=i; y0=j; }
virtual void set() = 0;
virtual void draw() = 0;
protected:
int x0, y0;
};
class line : public point
{
public:
line(int i=0, int j=0, int m=0, int n=0):point(i, j)
{
x1=m; y1=n;
}
void set() { cout"line::set() called.\n"; }
void draw() { cout"line::draw() called.\n"; }
protected:
int x1, y1;
};
class ellipse : public point
{
public:
ellipse(int i=0, int j=0, int p=0, int q=0):point(i, j)
{
x2=p; y2=q;
}
void set() { cout"ellipse::set() called.\n"; }
void draw() { cout"ellipse::draw() called.\n"; }
protected:
int x2, y2;
};
void drawobj(point *p)
{
p-draw();
}
void setobj(point *p)
{
p-set();
}
void main()
{
line *lineobj = new line;
ellipse *elliobj = new ellipse;
drawobj(lineobj);
drawobj(elliobj);
cout setobj(lineobj);
setobj(elliobj);
cout"\nRedraw the object...\n";
drawobj(lineobj);
drawobj(elliobj);
}
抽象類
帶有純虛函數的類稱為抽象類。抽象類是一種特殊的類,它是為了抽象和設計的目的而建立的,它處于繼承層次結構的較上層。抽象類是不能定義對象的,在實際中為了強調一個類是抽象類,可將該類的構造函數說明為保護的訪問控制權限。
抽象類的主要作用是將有關的組織在一個繼承層次結構中,由它來為它們提供一個公共的根,相關的子類是從這個根派生出來的。
抽象類刻畫了一組子類的操作接口的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作接口,而完整的實現留給子類。
抽象類只能作為基類來使用,其純虛函數的實現由派生類給出。如果派生類沒有重新定義純虛函數,而派生類只是繼承基類的純虛函數,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數的實現,則該派生類就不再是抽象類了,它是一個可以建立對象的具體類了。
首先一定從最簡單程序Hello World開始
然后是數據類型、標識符、運算符、表達式、常量和變量(這些都是最基礎的了)
接著會講一些算法流程
接下來就是系統的學習C編程,需要涉及的內容有:
完整的輸入輸出
順序結構、分支結構、循環(huán)結構(包括中斷和繼續(xù))
函數的定義和使用
數組及順序表
指針與地址
結構體與共用體
數據結構(包括鏈表、棧與隊列、樹、圖等)
學完這些之后就可以學C++了,C++主要涉及的內容如下:
引用和內聯函數的使用
類與對象(及訪問權限)
構造函數與析構函數
繼承和多態(tài)
純虛函數與抽象類
運算符重載
靜態(tài)成員和友元
C++高級編程主要包括
STL模板(集合類)
UC高級編程和QT編程(Linux/Unix方向)
Windows內核編程和MFC(Windows方向)
訪問數據庫(數據庫軟件一般使用甲骨文,也有用SQL Server的)
#include "stdio.h"
main()
{
float a,b,c,p;
loop1:
printf("please enter pianshang a:\n");
scanf("%f",a);
printf("please enter pianshang b:\n");
scanf("%f",b);
printf("please enter pianshang c:\n");
scanf("%f",c);
if(a+b=c||a+c=b||b+c=a)
{
printf("error! please check again and enter three number:");
goto loop1;
}
p=a+b+c;
printf("%f",p);
getch();
}
其實只能是一個函數,不能兩個兼顧.
多態(tài)性是指用一個名字定義不同的函數,這函數執(zhí)行不同但又類似的操作,從而實現“一個接口,多種方法”。
多態(tài)性的實現與靜態(tài)聯編、動態(tài)聯編有關。靜態(tài)聯編支持的多態(tài)性稱為編譯時的多態(tài)性,也稱靜態(tài)多態(tài)性,它是通過函數重載和運算符重載實現的。動態(tài)聯編支持的多態(tài)性稱為運行時的多態(tài)性,也稱動態(tài)多態(tài)性,它是通過繼承和虛函數實現的。
2.函數重載
函數重載的意義在于他能用同一個名字訪問一組相關的函數。
在類中普通成員函數和構造函數都可以重載,特別是構造函數的重載(他提供了多種初使化方式)給用戶更大的靈活性。在基類和派生類的函數重載有兩種情況:一種是參數有所差別的重載。另一種是參數沒有差別的重載,只是他們屬于不同的類。
可以用以下兩種方法來區(qū)分這兩種函數:用對象名加以區(qū)分;使用“類名::”加以區(qū)分。
3.運算符重載稱動態(tài)多態(tài)性,他是通過繼承和虛函數實現的。
運算符重載通過創(chuàng)建運算符函數operator@()來實現。運算符函數定義了重載的運算符將要進行的操作,這種操作通常作用在一個類上。這樣,在編譯時遇到名為operator@的運算符函數(@表示所要重載的運算符),就檢查傳遞給函數的參數的類型。
重載運算符與預定義運算符的使用方法完全相同,它不能改變原有運算符的參數個數(單目或雙目),也不能改變原有的優(yōu)先級的結合性。用戶不能定義新的運算符,只能從C++已有的運算符中選擇一個恰當的運算符重載。
3.1成員運算符函數
運算符函數可以定義為它將要操作的類的成員(稱為成員運算符函數),也可以定義為非類的成員,但是非成員的運算符函數大多是類的友元函數(稱為友元運算符函數)。
成員運算符函數在類中的聲明格式為:
class X{
//……
type operator@(參數表);
};
其中type為函數的返回類型,@為所要重載的運算符符號,X是重載此運算符的類名,參數表中羅列的是該運算符所需要的操作數。
成員運算符函數定義的形式一般為:
type X::operator@(參數表)
//函數體}
其符號的含義與聲明時相同。
在成員運算符函數的參數表中,若運算符是單目的,則參數表為空,此時當前對象作為運算符的一個操作數,通過this指針隱含地傳遞給函數的;若運算符是雙目的,則參數表中有一個操作數,它作為運算符的右操作參數,此時當前對象做為運算符的左操作數,它是this指針隱含地傳遞給函數的。總之成員運算符函數operator@所需要的一個操作數是由對象通過this指針隱含傳遞。
3.2友元運算符函數
在C++中可以把運算符函數定義成某個類的友元函數,稱為友元運算符函數。
友元運算符函數在類的內部聲明格式如下:
friend type operator@(參數表)
定義友元運算符函數格式如下:
type operator@(參數表)
{ //函數體
}
與成員運算符函數不同,友元運算符函數是不屬于任何類對象的,它沒有this指針。若重載的是雙目運算符,則參數表中有兩個操作數;若重載的是單目運算符,則參數表中只有一個操作數。 不能用友元函數重載的運算符是=、()、[]、-〉,其余的運算符都可以使用友元函數來實現重載。
運算符函數調用形式如下表:
運算符函數調用形式
習慣形式 友元運算符函數調用形式 成員運算符函數調用形式
a+b operator(a,b) a.operator+(b)
-a operator-(a) a.operator-()
a++ operator++(a,0) a.operator++(0)
4.賦值運算符
繼承C語言,用戶自定義的類和結構都要能進行賦值運算。而數組名不能賦值,數組名實質上是一個常量指針。
對于任何類,C++提供了默認的賦值運算符。一般地,默認的賦值運算符重載是能夠勝任工作的。當類中有指針類型時,需要自定義賦值運算符函數。一般其函數體包含兩部分:
1)與析構函數類似,取消對象已經占有的資源;
2)與構造函數類似,在其中分配新的資源。
類的賦值運算符重載“=”只能重載為成員函數,不能重載為友元函數。
重載后的運算符函數operator=()不能被繼承。
拷貝構造函數和賦值運算符重載的區(qū)別:聲明和定義方式不同;調用方式不同。
5.虛函數
虛函數是重載的另一種表現形式,允許虛函數調用與函數體之間的聯系在運行時才建立。
定義:虛函數就是在基類中被關鍵字virtual說明,并在派生類中重新定義的函數,在派生類中重新定義時,其函數原形包括返回類型,函數名,參數個數與參數類型的順序,都必須與基類中的原形必須相同。
構造函數不能是虛函數,但析構函數可以是虛函數。
虛函數與重載函數的關系:當普通的函數重載時,其函數的參數或參數類型必須有所不同,函數的返回類型也可不同;在派生類中,重新定義虛函數時要求函數名、返回類型、參數個數、參數的類型和順序與基類中的函數原形完全相同;若僅僅返回類型不同,其余均相同,系統會給出錯誤信息。虛函數重載時若僅僅函數名相同,而參數的個數、類型或順序不同系統將它作為普遍函數重載,虛函數的特征將會丟失。
多重繼承與虛函數:多重繼承可視為多個單繼承的組合。
6.純虛函數和抽象類
純虛函數:是一個在基類中說明的虛函數,他在該基類中沒有定義,但要求在它的派生類中定義自己的版本,或重新說明為純虛函數。
純虛函數的一般形式:virtual type func_name(參數表)=0(type是函數的返回類型,func_name是函數名)。
抽象類:一個類至少有一個純虛函數的類。抽象類提供了處理各種不同派生類的統一接口,將實現的責任交給了派生類。
另外,站長團上有產品團購,便宜有保證
網頁名稱:c語言純虛函數 c 純虛函數
網頁網址:http://vcdvsql.cn/article16/doodsgg.html
成都網站建設公司_創(chuàng)新互聯,為您提供App設計、網站設計公司、用戶體驗、軟件開發(fā)、網站改版、虛擬主機
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯