c 類的過載成員該怎麼理解。急

時間 2022-11-26 10:10:54

1樓:

由string類型別和vector類型別定義的型別,用以儲存任意string物件或vector物件的長度,標準庫型別將size_type定義為unsigned型別

所以class screen//返回字串contents的cursor下標,這個和c的字元陣列類似

char get() (index hg,index wi) const;

private:

std::string contents;

index cursor;

index height width;};

2樓:匿名使用者

typedef 的目的是把index定義成std::string::size_type 的別名,這裡應該就是無符號整型

兩個get函式首先解釋下const的意思,表明該函式不會改變任何成員變數的值

這兩個函式的返回值都是char型 只是引數不同,實現不同

第乙個函式沒有引數,返回string constents中curcor所對應的字元,算是inline函式

第二個函式有兩個引數,但沒有實現,應該在對應的cpp檔案中有具體的實現,這裡只是乙個函式宣告

多看些c++方面的書吧,至少要把c++ primer和prgramming language c++這兩本書通讀一遍

3樓:匿名使用者

幫你整理下啊:

class screen //這裡定義了乙個函式,該函式沒有引數,返回值是乙個char型,並且是不能被外部修改的值(用const修飾了)。 函式體裡面

return contents[cursor]; //contents是乙個string型別的, cursor是乙個index型的,所以

contents[cursor]就是指字串contents中處在cursor位置上的字元。

char get() (index hg, index wi) const; //我猜想應該不是這樣的吧,而是

char get(index hg, index wi) const; //這個函式與上面的函式構成過載,什麼是函式的過載呢?即函式的引數個數,引數型別,引數順序等不同,就能夠長過載。

函式過載的意義:當你呼叫函式時,對同乙個函式名,你給的引數不同那麼呼叫的函式也就不同。

不懂再問吧

4樓:小菜地卜

char get() const

char get() (index hg,index wi) const;這兩個函式為過載函式,函式名相同而形參個數或型別不同的函式就是過載函式,從screen類的定義可知,contents和cursor都為私有成員,其變數型別不同,contents是std::string型別的變數,應該在其他檔案中有定義其型別,而cursor是index

型別的變數,在public下的第一行已經定義過,是std::string::size_type 型別的。

對於兩個過載函式的區別,是在類的實現過程中編譯器自動識別的,根據實現檔案中所提供的物件是否帶引數,或者引數的個數不同加以區別。

c++中成員函式過載是什麼意思?

5樓:du瓶邪

過載函式

過載,英文為overloading,大概就是很多個的意思。

舉個例子,比如,我需要個函式。

取2個int的最大值。很容易,函式介面應該是(1) int max(int a, int b);

那更進一步,我取3個 int 的最大值呢,介面可以定義為(2) int max(int a, int b, int c);

對比 函式(1), (2), 的名字,是一樣的,都叫 max,就只有引數的個數不同。這是函式過載。

那現在,我需要取兩個float的最大值呢,介面也可以定義為(3) float max(float a, float b);

對比 函式(1),(3), 名字也是一樣的,叫max。引數個數也是一樣的。不過引數的型別不同。這也是函式過載。

6樓:

函式的過載,主要是說,當你傳進對應的引數的時候,呼叫的對應的函式。也就是樓上所說的多型。比如乙個籃子可以裝蘋果8個或者裝梨子4個。

當你告訴籃子說我要裝蘋果,它就給你返回乙個說我能裝8個。你又告訴籃子說我要裝梨子,它就給你返回乙個4個。就是這個意思。

7樓:歪歪

函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

1.2、為什麼需要函式過載(why)?試想如果沒有函式過載機制,如在c中,你必須要這樣去做:

為這個print函式取不同的名字,如print_int、print_string。這裡還只是兩個的情況,如果是很多個的話,就需要為實現同乙個功能的函式取很多個名字,如加入列印long型、char*、各種型別的陣列等等。這樣做很不友好!

類的建構函式跟類名相同,也就是說:建構函式都同名。如果沒有函式過載機制,要想例項化不同的物件,那是相當的麻煩!

操作符過載,本質上就是函式過載,它大大豐富了已有操作符的含義,方便使用,如+可用於連線字串等!

我們在開瓶瓶罐罐的時候,經常會遭遇因各種瓶口規格不同而找不到合適的工具的尷尬。所以有時候就為了開個瓶,家裡要備多種規格的開瓶器。同樣是開個瓶子嘛,何必這麼麻煩?

於是有人發明了多功能開瓶器,不管啤酒瓶汽水瓶還是軟木塞的紅酒瓶都能輕鬆開啟。

然而開瓶器的問題也會發生到程式設計中。比如我們要編寫乙個函式來求乙個數的絕對值,然而整數、浮點型數、雙精度型數都有絕對值,但為它們編寫的函式返回值型別卻是各不相同的。比如:

int iabs(int a);

float fabs(float a);

double dabs(double a);

這樣是不是有點備了多種開瓶器的感覺?我們能不能在程式設計中也做乙個多功能的開瓶器,把所有資料型別的求絕對值都交給abs這乙個函式呢?

在c++中,我們也能夠把具有相同功能的函式整合到乙個函式上,而不必去寫好多個函式名不同的函式,這叫做函式的重(音chóng)載(overload)。過載的本質是多個函式共用同乙個函式名。

我們先來看乙個函式過載的例項:(程式6.3)

#include "iostream.h"

int abs(int a);//當引數為整型資料時的函式原型

float abs(float a);//當引數為浮點型資料時的函式原型

double abs(double a);//當引數為雙精度型資料時的函式原型

int main()

int abs(int a)//函式定義

float abs(float a)

double abs(double a)

執行結果:

int abs

int abs

a=5b=3

float abs

float abs

c=2.4

d=8.4

double abs

double abs

e=3e-009

f=3e+006

執行結果表明,abs函式果然能夠處理三種不同資料型別的資料了。那麼我們怎樣才能自己造乙個「多功能工具」呢?

其實要編寫乙個過載函式並不是很麻煩。首先,我們要告訴電腦,同乙個函式名存在了多種定義,所以,我們要給同乙個函式名寫上多種函式原型(如程式6.3的第二到第四行);其次,我們要對應這些函式原型,分別寫上這些函式的定義(如程式6.

3的主函式體之後,對三個abs函式的定義)。

然而電腦又是如何來識別這些使用在不同環境下的「工具」的呢?

在日常生活中使用到多功能工具,如果我們不知道具體應該使用哪個工具,我們會把每個工具放上去試一試,如果只有唯一乙個工具適合,那麼我們就毫無疑問地能夠確定就是使用它了。但是如果出現了兩個或者兩個以上工具都能適合,我們就分不清到底應該使用哪個是正確的了。

電腦的做法和我們是類似的。電腦是依靠函式宣告時參數列中引數個數、各引數的資料型別和順序來判斷到底要執行哪個函式的。因此,當過載函式引數表完全相同的時候,電腦便無法判斷應該執行哪個函式,於是程式就出錯了。

我們了解了電腦是如何識別過載函式以後,發現要編寫乙個過載函式還是需要注意一些地方的,那就是:在過載函式中,任意兩個函式的參數列中的引數個數、各引數的資料型別和順序不能完全一樣。例如int func(int a,char b)和float func(int c,char d)就不能過載,因為它們的引數個數、各引數的型別和順序完全一樣,即使形參名不同、返回值型別不同也是無濟於事的。

在呼叫乙個過載函式時,可能會發生找不到乙個完全合適的函式。這時候,就需要進行資料型別的轉換。由於這種方法可能導致資料丟失或資料型別不嚴格符合,且在充分考慮問題後,這種情況是可以盡量避免的,所以這裡不再就這個問題論述。

有興趣的讀者可以查閱其他c++的參考資料。

從某種意義上說,過載函式是方便了函式的使用者。在前一節我們知道,如果完成了所有函式的編寫,那麼完成乙個程式就像搭積木一樣簡單了。然而如果功能相似名字卻不同的函式太多,那麼多「積木」搭起來也未必簡單。

當函式的編寫者充分考慮了不同情況下應該執行稍有不同的函式,函式的使用者就不必為這些小細節而煩惱了。不過過載函式的函式名還是應該符合其功能,如果把功能完全不同的函式過載,那麼就大大影響了程式的可讀性。

8樓:匿名使用者

這是函式的過載,能夠實現多型。根據引數的型別分別呼叫不同的函式

9樓:朱同路口

函式的過載,函式名字雖相同,但是功能缺失不同。可以根據需要傳進去的引數做到函式功能不同。

10樓:匿名使用者

應該乙個是建構函式,乙個是成員函式

c++中運算子=為什麼必須過載為類的成員函式

11樓:匿名使用者

假設有個類a,如下語句:a a;a b=a;

這時候的複製運算子會起作用,而且是專以成員函式被呼叫的屬,等價於b.operate=(a)。如果不是成員函式,那麼不能這樣使用。

另外,必須過載說法是有問題的,只有類裡面有指標成員的時候才需要過載

C 類的靜態成員怎麼析構

a a 歡迎採納!首先 靜態成員變數應該在類外初始化 其次 看看這裡吧c 類的靜態成員變數指標如何釋放 靜態成員變數本質上是全域性變數,被所有該類的物件所共享。因此它只需要單獨析構一次。具體到你這個,比如就可以這樣 a a 或者int main 在c 中,靜態成員是屬於整個類的而不是某個物件,靜態成...

c父類中,必須被繼承類過載的方法前面可以有abstract 重點解釋一下原因

你可以根據專案實現功能的需求使用abstract定義抽象類,不同的知識點的存在只是為了有效解決不同的問題而提出的方法,在使用時要記住,抽象類中不一定要有抽象方法,而抽象方法一定是在抽象類中的。並且抽象類不能被例項化,也就是不能建立物件。父類使用abstract修飾,子類繼承父類的同時必須過載父類的抽...

c 類中私有成員只能通過類設定的介面函式訪問。舉個例子

class person 在這段 中如果要獲取person類的name值,必須要呼叫getname函式,假如有乙個person型別的變數p,則如果要獲取p的name需要進行如下的操作 p.getname 而不能直接用p.name獲取 class gun gun fire else return 0 ...

如何訪問私有成員(c 改錯),在C 中訪問類的私有成員變數的方法有哪些

在類中加入公有的get函式和set函式就可以訪問私有成員,直接訪問是不行的,不然就不叫私有成員了 私有成員變數在別的類中是無法訪問的,要不還叫什麼私有。不過子類可以通過設定器和訪問器來訪問父類的私有成員變數。public class a public void setname string name...

C結構體成員函式,c 結構體中的成員函式怎麼解決

foo b 語句3 去掉括號,foo b 這點與class有差別,沒有引數的時候,不需要括號。之所以 foo a 10 語句1 可以,而foo b 不可以 原因是 foo a 100 等價於 foo a foo 100 也就是int隱式轉化為foo,然後複製給a 雖然在本質上不能這麼理解 而你所期望...