C 求助什麼叫類體內定義成員函式

時間 2021-05-14 08:37:13

1樓:匿名使用者

class student

{public:

void display(){cou<<"num: "<

c++中怎麼理解類內定義的成員函式就是行內函數?

2樓:匿名使用者

當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函式體無論是在類的內部還是類的外部,這個成員函式在編譯器看來,都等同於inline 行內函數了。

3樓:手機使用者

好像inline現在確實很少用了,編譯器都越來越智慧了

tenglvjun說的對,編譯器是否把函式編成內聯,它有自己的判斷,並不會因為你寫了inline就一定是內聯.就和register一樣,並不是加了register,編譯器就一定會把變數放到暫存器中

4樓:扶範西門靈秀

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在類外定義的成員函式就不是行內函數。

c++ 類中定義成員函式的型別是引用類本身是什麼意思

5樓:匿名使用者

這個instance 是一個指標函式,,,具體goole -》 windows 程式設計

然後他的返回值是一個player類的值(如同int類一樣)最後還沒懂有兩情況,1、我沒說清楚,請追問,2、你徹底不懂,請重頭學習類與物件部分

6樓:匿名使用者

instance是一個類的靜態函式,並非是指標函式,返回值是 _instance的引用。

_instance是一個靜態的player物件,跟全域性物件的區別在於它可使用的範圍只能在instance這個靜態函式裡。

但是由於instance函式返回的是_instance的引用,所以 _instance在此靜態函式外也可以改變它的值,player::instance就可以看作是全域性物件了。

7樓:匿名使用者

額 這個是個特殊吧 ,因為_instance是靜態成員函式的靜態變數。因為它的儲存位置 是在靜態儲存區,所以在整個程式執行階段它都存在,中間不會被釋放

8樓:趙宇翔

那個只是一個函式的返回值,返回一個本類的物件引用。

請問c++中成員函式在類裡面定義和在類外定義有什麼區別?

9樓:浪跡天涯的流星

效能來說沒啥區別。

不過放在類外,**的定義和實現分開,有利於**封轉,別人需要呼叫你的介面的時候,你可以只給他標頭檔案,**的實現自己留著。

10樓:匿名使用者

在類裡定義時,這種函式會被編譯器編譯成行內函數,在類外定義的函式則不會。行內函數的好處是加快程式的執行速度,缺點是會增加程式的尺寸。比較推薦的寫法是把一個經常要用的而且實現起來比較簡單的小型函式放到類裡去定義,大型函式最好還是放到類外定義。

11樓:壞白闌珊

差多了。作為剛學習c++的人,我提醒一個點,可以去了解一下行內函數。

類體外定義成員函式和 內聯成員函式有什麼區別

12樓:匿名使用者

行內函數

在類宣告內定義行內函數

行內函數

在c++中,使用者可以建立實際上不呼叫的短函式,他們的**在每次呼叫的程式行裡得到擴充套件。這個過程類似於使用類似函式的巨集。為使一個函式在程式行進行**擴充套件而不被呼叫,只要在函式前面加上關鍵字inline即可。

例如,在下面的程式,函式max()在行內擴充套件而不被呼叫:

#include

using namespace std;

inline int max(int a, int b)

int main()

行內函數是c++的一個重要補充的原因是,他們能使程式設計師寫出非常有效的**。因為類一般要求幾個經常被執行的介面函式,因此,這些函式的效率在c++中是非常重要的。我們知道,每次呼叫函式時,變元要進棧,各種暫存器內容要儲存;函式返回時,又要恢復他們的內容。

問題是這些指令要佔用時間。但是,如果函式在行內擴充套件,上述那些操作就不存在了。當然,雖然函式行內擴充套件能產生較快的速度,但由於重複編碼會產生較長的**,因此最好只內聯那些能明顯影響程式效能的函式。

inline對編譯器是一種請求,而不是命令。編譯器可以選擇忽略它。還有,一些編譯器不能內聯所有型別的函式。

例如,通常編譯器不能內聯遞迴函式。必須查閱自己的編譯器使用者手冊以瞭解對內聯的限制。如果一個函式不能被內聯,它就被當作一個正常的函式呼叫。

inline關鍵字不是c++的 c子集 的一部分,因此,c89沒有定義它,然而,c99中增加了它。

行內函數可以是類的成員。

class myclass;

inline void myclass::init(int i,int j)

inline void myclass::show()

void show(){cout<

建構函式和解構函式也可以是內聯的。

——————————————————————————————————————————

c++參考大全(第四版)

13樓:莫謹瑜

還是有點區別的,c++提供的行內函數在編譯時與程式中其他**聯在一塊了,就是說編譯器將行內函數的**替換了函式呼叫。行內函數不用像類外定義的其他成員函式一樣調來調去,所以使用行內函數的一個優點是執行速度稍快,但缺點是佔更多的記憶體。因此行內函數適用於一些簡單的**,比如求和,求差等等。

14樓:captainz鈥唊

區別大了,行內函數看著像函式其實編譯後他就不是函式了,他只是內斂的函式體內的部分。所以他沒有函式地址;

c++中定義的類,裡面的成員函式可以直接使用嗎?就是在沒有物件的時候。 例如,class裡有一個成 20

15樓:匿名使用者

沒有物件的時候要訪問類成員函式的話,只能訪問靜態成員函式。例如:

class a

}這樣可以在主函式裡直接用

a::abc();

這樣的語句進行呼叫。

16樓:匿名使用者

如果是static函式,可以用類名::abc()來呼叫

如果不是static函式,不可以直接呼叫

17樓:匿名使用者

不可以,唯一的例外是宣告成static 的成員函式可以

18樓:紛採

#include

using namespace std;

class hello

};int main(void)

19樓:匿名使用者

把類名當成名稱空間。

要呼叫的方法,寫成靜態方法,用類名引用。

c++類內部函式在外面定義怎麼定義

20樓:椴

10.1.2 類成員函式的定義

類的成員函式通常在類外定義,一般形式如下:

返回型別 類名::函式名(形參表)

雙冒號::是域運算子,它主要用於類的成員函式的定義。

例如,例10-1的成員函式point類的成員函式可定義為:

例10-5

1. void point::setpt (int x, int y)

2. 6. void point::offsetpt (int x, int y)

7. 11. int point:: getx ()

12.15. int point:: gety ()

16.正象全域性函式可以定義為行內函數一樣,類的成員函式也可以定義為內聯的。例如,類point的兩個成員函式都很短(僅兩個語句),如果定義為行內函數,可以提高執行效率。定義內聯的成員函式只要在該成員函式定義前插入inline關鍵字即可:

inline void point::setpt (int x,int y)

定義行內函數一個更容易的方法是:將函式定義放在類的定義內。

class point

int gety ()

void setpt (int x,int y)

void offsetpt (int x,int y)

};需要注意的是:由於函式體在類內,所以函式原型後不需要分號,且所有的函式引數必須有名的。

21樓:幸巴達

class ex

;int ex::get(void)

void ex::set(int n) //關鍵是這裡,編譯器老是出錯

int main()

exarray[9].set(53);

for(int c=0;c<10;c++)return 0;}

c++中,在定義類時,在類中的成員函式的表示方式是,類名::成員函式,這是什麼意思

22樓:向丶思陽

::這個叫做作用域限定符,類名::函式名,是說明這個函式是這個類的成員函式,而不是其他類的。因為很多時候不同類都有同名的成員函式。

c語言!!求助,C語言求助!!!

沒什麼問題,兩題給出的答案都是正確的。第2題 後面按c語言要求帶上規定的字元或數字,構成轉義字元,因此要想將 賦給字元變數ch,需要定義為 ch 而不是ch 選項a是錯誤的。其餘選項都是正確的。選a第9題 011表示八進位制數,轉為十進位制數是9,執行printf語句,a,是a先自增1 9 1 10...

c語言求助,C語言求助!!!

首先,源程式是從100到0一個個輸出的,比較符合輸出的格式,所以簡單一些。而圖二的輸出不能只知道一個100分的就輸出,必須要把所有的成績統計出來,找出所有每個分數段的人數,還要比較出最高人數,以最高人數確定輸出的總行數,總行數減去已經輸出的行數的結果與分數段數比較,小於等於就輸出 否則輸出空格。最後...

C語言求助,C語言問題,求助

孫毅超 二進位制數在計算機記憶體儲的是其補碼 對於有符號數,正數的補碼和本身一樣,負數的補碼是本身的數字位取反後加1 比如 1 0001 補 0001 1 1001 補 1111 計算機儲存 1就是儲存的1111 而int是兩個位元組的,也就是16位的二進位制,因此65535也就是111111111...