你說的是c++的抽象類
我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、云州ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的云州網(wǎng)站制作公司
純虛函數(shù)和抽象類
純虛函數(shù)是一種特殊的虛函數(shù),它的一般格式如下:
class 類名
{
virtual 類型函數(shù)名(參數(shù)表)=0;
…
};
在許多情況下,在基類中不能對虛函數(shù)給出有意義有實(shí)現(xiàn),而把它說明為純虛函數(shù),它的實(shí)現(xiàn)留給該基類的派生類去做。這就是純虛函數(shù)的作用。下面給出一個純虛函數(shù)的例子。
#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);
}
抽象類
帶有純虛函數(shù)的類稱為抽象類。抽象類是一種特殊的類,它是為了抽象和設(shè)計的目的而建立的,它處于繼承層次結(jié)構(gòu)的較上層。抽象類是不能定義對象的,在實(shí)際中為了強(qiáng)調(diào)一個類是抽象類,可將該類的構(gòu)造函數(shù)說明為保護(hù)的訪問控制權(quán)限。
抽象類的主要作用是將有關(guān)的組織在一個繼承層次結(jié)構(gòu)中,由它來為它們提供一個公共的根,相關(guān)的子類是從這個根派生出來的。
抽象類刻畫了一組子類的操作接口的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作接口,而完整的實(shí)現(xiàn)留給子類。
抽象類只能作為基類來使用,其純虛函數(shù)的實(shí)現(xiàn)由派生類給出。如果派生類沒有重新定義純虛函數(shù),而派生類只是繼承基類的純虛函數(shù),則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數(shù)的實(shí)現(xiàn),則該派生類就不再是抽象類了,它是一個可以建立對象的具體類了。
首先一定從最簡單程序Hello World開始
然后是數(shù)據(jù)類型、標(biāo)識符、運(yùn)算符、表達(dá)式、常量和變量(這些都是最基礎(chǔ)的了)
接著會講一些算法流程
接下來就是系統(tǒng)的學(xué)習(xí)C編程,需要涉及的內(nèi)容有:
完整的輸入輸出
順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)(包括中斷和繼續(xù))
函數(shù)的定義和使用
數(shù)組及順序表
指針與地址
結(jié)構(gòu)體與共用體
數(shù)據(jù)結(jié)構(gòu)(包括鏈表、棧與隊列、樹、圖等)
學(xué)完這些之后就可以學(xué)C++了,C++主要涉及的內(nèi)容如下:
引用和內(nèi)聯(lián)函數(shù)的使用
類與對象(及訪問權(quán)限)
構(gòu)造函數(shù)與析構(gòu)函數(shù)
繼承和多態(tài)
純虛函數(shù)與抽象類
運(yùn)算符重載
靜態(tài)成員和友元
C++高級編程主要包括
STL模板(集合類)
UC高級編程和QT編程(Linux/Unix方向)
Windows內(nèi)核編程和MFC(Windows方向)
訪問數(shù)據(jù)庫(數(shù)據(jù)庫軟件一般使用甲骨文,也有用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();
}
其實(shí)只能是一個函數(shù),不能兩個兼顧.
多態(tài)性是指用一個名字定義不同的函數(shù),這函數(shù)執(zhí)行不同但又類似的操作,從而實(shí)現(xiàn)“一個接口,多種方法”。
多態(tài)性的實(shí)現(xiàn)與靜態(tài)聯(lián)編、動態(tài)聯(lián)編有關(guān)。靜態(tài)聯(lián)編支持的多態(tài)性稱為編譯時的多態(tài)性,也稱靜態(tài)多態(tài)性,它是通過函數(shù)重載和運(yùn)算符重載實(shí)現(xiàn)的。動態(tài)聯(lián)編支持的多態(tài)性稱為運(yùn)行時的多態(tài)性,也稱動態(tài)多態(tài)性,它是通過繼承和虛函數(shù)實(shí)現(xiàn)的。
2.函數(shù)重載
函數(shù)重載的意義在于他能用同一個名字訪問一組相關(guān)的函數(shù)。
在類中普通成員函數(shù)和構(gòu)造函數(shù)都可以重載,特別是構(gòu)造函數(shù)的重載(他提供了多種初使化方式)給用戶更大的靈活性。在基類和派生類的函數(shù)重載有兩種情況:一種是參數(shù)有所差別的重載。另一種是參數(shù)沒有差別的重載,只是他們屬于不同的類。
可以用以下兩種方法來區(qū)分這兩種函數(shù):用對象名加以區(qū)分;使用“類名::”加以區(qū)分。
3.運(yùn)算符重載稱動態(tài)多態(tài)性,他是通過繼承和虛函數(shù)實(shí)現(xiàn)的。
運(yùn)算符重載通過創(chuàng)建運(yùn)算符函數(shù)operator@()來實(shí)現(xiàn)。運(yùn)算符函數(shù)定義了重載的運(yùn)算符將要進(jìn)行的操作,這種操作通常作用在一個類上。這樣,在編譯時遇到名為operator@的運(yùn)算符函數(shù)(@表示所要重載的運(yùn)算符),就檢查傳遞給函數(shù)的參數(shù)的類型。
重載運(yùn)算符與預(yù)定義運(yùn)算符的使用方法完全相同,它不能改變原有運(yùn)算符的參數(shù)個數(shù)(單目或雙目),也不能改變原有的優(yōu)先級的結(jié)合性。用戶不能定義新的運(yùn)算符,只能從C++已有的運(yùn)算符中選擇一個恰當(dāng)?shù)倪\(yùn)算符重載。
3.1成員運(yùn)算符函數(shù)
運(yùn)算符函數(shù)可以定義為它將要操作的類的成員(稱為成員運(yùn)算符函數(shù)),也可以定義為非類的成員,但是非成員的運(yùn)算符函數(shù)大多是類的友元函數(shù)(稱為友元運(yùn)算符函數(shù))。
成員運(yùn)算符函數(shù)在類中的聲明格式為:
class X{
//……
type operator@(參數(shù)表);
};
其中type為函數(shù)的返回類型,@為所要重載的運(yùn)算符符號,X是重載此運(yùn)算符的類名,參數(shù)表中羅列的是該運(yùn)算符所需要的操作數(shù)。
成員運(yùn)算符函數(shù)定義的形式一般為:
type X::operator@(參數(shù)表)
//函數(shù)體}
其符號的含義與聲明時相同。
在成員運(yùn)算符函數(shù)的參數(shù)表中,若運(yùn)算符是單目的,則參數(shù)表為空,此時當(dāng)前對象作為運(yùn)算符的一個操作數(shù),通過this指針隱含地傳遞給函數(shù)的;若運(yùn)算符是雙目的,則參數(shù)表中有一個操作數(shù),它作為運(yùn)算符的右操作參數(shù),此時當(dāng)前對象做為運(yùn)算符的左操作數(shù),它是this指針隱含地傳遞給函數(shù)的??傊蓡T運(yùn)算符函數(shù)operator@所需要的一個操作數(shù)是由對象通過this指針隱含傳遞。
3.2友元運(yùn)算符函數(shù)
在C++中可以把運(yùn)算符函數(shù)定義成某個類的友元函數(shù),稱為友元運(yùn)算符函數(shù)。
友元運(yùn)算符函數(shù)在類的內(nèi)部聲明格式如下:
friend type operator@(參數(shù)表)
定義友元運(yùn)算符函數(shù)格式如下:
type operator@(參數(shù)表)
{ //函數(shù)體
}
與成員運(yùn)算符函數(shù)不同,友元運(yùn)算符函數(shù)是不屬于任何類對象的,它沒有this指針。若重載的是雙目運(yùn)算符,則參數(shù)表中有兩個操作數(shù);若重載的是單目運(yùn)算符,則參數(shù)表中只有一個操作數(shù)。 不能用友元函數(shù)重載的運(yùn)算符是=、()、[]、-〉,其余的運(yùn)算符都可以使用友元函數(shù)來實(shí)現(xiàn)重載。
運(yùn)算符函數(shù)調(diào)用形式如下表:
運(yùn)算符函數(shù)調(diào)用形式
習(xí)慣形式 友元運(yùn)算符函數(shù)調(diào)用形式 成員運(yùn)算符函數(shù)調(diào)用形式
a+b operator(a,b) a.operator+(b)
-a operator-(a) a.operator-()
a++ operator++(a,0) a.operator++(0)
4.賦值運(yùn)算符
繼承C語言,用戶自定義的類和結(jié)構(gòu)都要能進(jìn)行賦值運(yùn)算。而數(shù)組名不能賦值,數(shù)組名實(shí)質(zhì)上是一個常量指針。
對于任何類,C++提供了默認(rèn)的賦值運(yùn)算符。一般地,默認(rèn)的賦值運(yùn)算符重載是能夠勝任工作的。當(dāng)類中有指針類型時,需要自定義賦值運(yùn)算符函數(shù)。一般其函數(shù)體包含兩部分:
1)與析構(gòu)函數(shù)類似,取消對象已經(jīng)占有的資源;
2)與構(gòu)造函數(shù)類似,在其中分配新的資源。
類的賦值運(yùn)算符重載“=”只能重載為成員函數(shù),不能重載為友元函數(shù)。
重載后的運(yùn)算符函數(shù)operator=()不能被繼承。
拷貝構(gòu)造函數(shù)和賦值運(yùn)算符重載的區(qū)別:聲明和定義方式不同;調(diào)用方式不同。
5.虛函數(shù)
虛函數(shù)是重載的另一種表現(xiàn)形式,允許虛函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系在運(yùn)行時才建立。
定義:虛函數(shù)就是在基類中被關(guān)鍵字virtual說明,并在派生類中重新定義的函數(shù),在派生類中重新定義時,其函數(shù)原形包括返回類型,函數(shù)名,參數(shù)個數(shù)與參數(shù)類型的順序,都必須與基類中的原形必須相同。
構(gòu)造函數(shù)不能是虛函數(shù),但析構(gòu)函數(shù)可以是虛函數(shù)。
虛函數(shù)與重載函數(shù)的關(guān)系:當(dāng)普通的函數(shù)重載時,其函數(shù)的參數(shù)或參數(shù)類型必須有所不同,函數(shù)的返回類型也可不同;在派生類中,重新定義虛函數(shù)時要求函數(shù)名、返回類型、參數(shù)個數(shù)、參數(shù)的類型和順序與基類中的函數(shù)原形完全相同;若僅僅返回類型不同,其余均相同,系統(tǒng)會給出錯誤信息。虛函數(shù)重載時若僅僅函數(shù)名相同,而參數(shù)的個數(shù)、類型或順序不同系統(tǒng)將它作為普遍函數(shù)重載,虛函數(shù)的特征將會丟失。
多重繼承與虛函數(shù):多重繼承可視為多個單繼承的組合。
6.純虛函數(shù)和抽象類
純虛函數(shù):是一個在基類中說明的虛函數(shù),他在該基類中沒有定義,但要求在它的派生類中定義自己的版本,或重新說明為純虛函數(shù)。
純虛函數(shù)的一般形式:virtual type func_name(參數(shù)表)=0(type是函數(shù)的返回類型,func_name是函數(shù)名)。
抽象類:一個類至少有一個純虛函數(shù)的類。抽象類提供了處理各種不同派生類的統(tǒng)一接口,將實(shí)現(xiàn)的責(zé)任交給了派生類。
另外,站長團(tuán)上有產(chǎn)品團(tuán)購,便宜有保證