c語言純虛函數(shù) c 純虛函數(shù)

我想問各位大俠解釋一下C語言中的抽象類型!

你說的是c++的抽象類

我們提供的服務有:網(wǎng)站設計制作、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、云州ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的云州網(wǎng)站制作公司

純虛函數(shù)和抽象類

純虛函數(shù)是一種特殊的虛函數(shù),它的一般格式如下:

class 類名

{

virtual 類型函數(shù)名(參數(shù)表)=0;

};

在許多情況下,在基類中不能對虛函數(shù)給出有意義有實現(xiàn),而把它說明為純虛函數(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ù)說明為保護的訪問控制權限。

抽象類的主要作用是將有關的組織在一個繼承層次結構中,由它來為它們提供一個公共的根,相關的子類是從這個根派生出來的。

抽象類刻畫了一組子類的操作接口的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作接口,而完整的實現(xiàn)留給子類。

抽象類只能作為基類來使用,其純虛函數(shù)的實現(xiàn)由派生類給出。如果派生類沒有重新定義純虛函數(shù),而派生類只是繼承基類的純虛函數(shù),則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數(shù)的實現(xiàn),則該派生類就不再是抽象類了,它是一個可以建立對象的具體類了。

C語言主要有哪些方面的東西要學!~

首先一定從最簡單程序Hello World開始

然后是數(shù)據(jù)類型、標識符、運算符、表達式、常量和變量(這些都是最基礎的了)

接著會講一些算法流程

接下來就是系統(tǒng)的學習C編程,需要涉及的內容有:

完整的輸入輸出

順序結構、分支結構、循環(huán)結構(包括中斷和繼續(xù))

函數(shù)的定義和使用

數(shù)組及順序表

指針與地址

結構體與共用體

數(shù)據(jù)結構(包括鏈表、棧與隊列、樹、圖等)

學完這些之后就可以學C++了,C++主要涉及的內容如下:

引用和內聯(lián)函數(shù)的使用

類與對象(及訪問權限)

構造函數(shù)與析構函數(shù)

繼承和多態(tài)

純虛函數(shù)與抽象類

運算符重載

靜態(tài)成員和友元

C++高級編程主要包括

STL模板(集合類)

UC高級編程和QT編程(Linux/Unix方向)

Windows內核編程和MFC(Windows方向)

訪問數(shù)據(jù)庫(數(shù)據(jù)庫軟件一般使用甲骨文,也有用SQL Server的)

C語言編程,求三角形園矩形的周長和面積,可抽象一個公共基base,在其中定義倆個純虛函數(shù)用于求面積和周長

#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ù),不能兩個兼顧.

在C++中,什么是運算符重載?什么是虛函數(shù)?

多態(tài)性是指用一個名字定義不同的函數(shù),這函數(shù)執(zhí)行不同但又類似的操作,從而實現(xiàn)“一個接口,多種方法”。

多態(tài)性的實現(xiàn)與靜態(tài)聯(lián)編、動態(tài)聯(lián)編有關。靜態(tài)聯(lián)編支持的多態(tài)性稱為編譯時的多態(tài)性,也稱靜態(tài)多態(tài)性,它是通過函數(shù)重載和運算符重載實現(xiàn)的。動態(tài)聯(lián)編支持的多態(tài)性稱為運行時的多態(tài)性,也稱動態(tài)多態(tài)性,它是通過繼承和虛函數(shù)實現(xiàn)的。

2.函數(shù)重載

函數(shù)重載的意義在于他能用同一個名字訪問一組相關的函數(shù)。

在類中普通成員函數(shù)和構造函數(shù)都可以重載,特別是構造函數(shù)的重載(他提供了多種初使化方式)給用戶更大的靈活性。在基類和派生類的函數(shù)重載有兩種情況:一種是參數(shù)有所差別的重載。另一種是參數(shù)沒有差別的重載,只是他們屬于不同的類。

可以用以下兩種方法來區(qū)分這兩種函數(shù):用對象名加以區(qū)分;使用“類名::”加以區(qū)分。

3.運算符重載稱動態(tài)多態(tài)性,他是通過繼承和虛函數(shù)實現(xiàn)的。

運算符重載通過創(chuàng)建運算符函數(shù)operator@()來實現(xiàn)。運算符函數(shù)定義了重載的運算符將要進行的操作,這種操作通常作用在一個類上。這樣,在編譯時遇到名為operator@的運算符函數(shù)(@表示所要重載的運算符),就檢查傳遞給函數(shù)的參數(shù)的類型。

重載運算符與預定義運算符的使用方法完全相同,它不能改變原有運算符的參數(shù)個數(shù)(單目或雙目),也不能改變原有的優(yōu)先級的結合性。用戶不能定義新的運算符,只能從C++已有的運算符中選擇一個恰當?shù)倪\算符重載。

3.1成員運算符函數(shù)

運算符函數(shù)可以定義為它將要操作的類的成員(稱為成員運算符函數(shù)),也可以定義為非類的成員,但是非成員的運算符函數(shù)大多是類的友元函數(shù)(稱為友元運算符函數(shù))。

成員運算符函數(shù)在類中的聲明格式為:

class X{

//……

type operator@(參數(shù)表);

};

其中type為函數(shù)的返回類型,@為所要重載的運算符符號,X是重載此運算符的類名,參數(shù)表中羅列的是該運算符所需要的操作數(shù)。

成員運算符函數(shù)定義的形式一般為:

type X::operator@(參數(shù)表)

//函數(shù)體}

其符號的含義與聲明時相同。

在成員運算符函數(shù)的參數(shù)表中,若運算符是單目的,則參數(shù)表為空,此時當前對象作為運算符的一個操作數(shù),通過this指針隱含地傳遞給函數(shù)的;若運算符是雙目的,則參數(shù)表中有一個操作數(shù),它作為運算符的右操作參數(shù),此時當前對象做為運算符的左操作數(shù),它是this指針隱含地傳遞給函數(shù)的。總之成員運算符函數(shù)operator@所需要的一個操作數(shù)是由對象通過this指針隱含傳遞。

3.2友元運算符函數(shù)

在C++中可以把運算符函數(shù)定義成某個類的友元函數(shù),稱為友元運算符函數(shù)。

友元運算符函數(shù)在類的內部聲明格式如下:

friend type operator@(參數(shù)表)

定義友元運算符函數(shù)格式如下:

type operator@(參數(shù)表)

{ //函數(shù)體

}

與成員運算符函數(shù)不同,友元運算符函數(shù)是不屬于任何類對象的,它沒有this指針。若重載的是雙目運算符,則參數(shù)表中有兩個操作數(shù);若重載的是單目運算符,則參數(shù)表中只有一個操作數(shù)。 不能用友元函數(shù)重載的運算符是=、()、[]、-〉,其余的運算符都可以使用友元函數(shù)來實現(xiàn)重載。

運算符函數(shù)調用形式如下表:

運算符函數(shù)調用形式

習慣形式 友元運算符函數(shù)調用形式 成員運算符函數(shù)調用形式

a+b operator(a,b) a.operator+(b)

-a operator-(a) a.operator-()

a++ operator++(a,0) a.operator++(0)

4.賦值運算符

繼承C語言,用戶自定義的類和結構都要能進行賦值運算。而數(shù)組名不能賦值,數(shù)組名實質上是一個常量指針。

對于任何類,C++提供了默認的賦值運算符。一般地,默認的賦值運算符重載是能夠勝任工作的。當類中有指針類型時,需要自定義賦值運算符函數(shù)。一般其函數(shù)體包含兩部分:

1)與析構函數(shù)類似,取消對象已經(jīng)占有的資源;

2)與構造函數(shù)類似,在其中分配新的資源。

類的賦值運算符重載“=”只能重載為成員函數(shù),不能重載為友元函數(shù)。

重載后的運算符函數(shù)operator=()不能被繼承。

拷貝構造函數(shù)和賦值運算符重載的區(qū)別:聲明和定義方式不同;調用方式不同。

5.虛函數(shù)

虛函數(shù)是重載的另一種表現(xiàn)形式,允許虛函數(shù)調用與函數(shù)體之間的聯(lián)系在運行時才建立。

定義:虛函數(shù)就是在基類中被關鍵字virtual說明,并在派生類中重新定義的函數(shù),在派生類中重新定義時,其函數(shù)原形包括返回類型,函數(shù)名,參數(shù)個數(shù)與參數(shù)類型的順序,都必須與基類中的原形必須相同。

構造函數(shù)不能是虛函數(shù),但析構函數(shù)可以是虛函數(shù)。

虛函數(shù)與重載函數(shù)的關系:當普通的函數(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)一接口,將實現(xiàn)的責任交給了派生類。

另外,站長團上有產(chǎn)品團購,便宜有保證

網(wǎng)頁名稱:c語言純虛函數(shù) c 純虛函數(shù)
網(wǎng)頁網(wǎng)址:http://www.muchs.cn/article16/doodsgg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、網(wǎng)站設計公司用戶體驗、軟件開發(fā)網(wǎng)站改版、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)