C++中類(lèi)的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說(shuō)明
成員函數(shù)
即在類(lèi)內(nèi)定義的方法。通過(guò)對(duì)象名.成員函數(shù)()的方式可以調(diào)用。
一般將成員函數(shù)定義在類(lèi)外,因?yàn)槌蓡T函數(shù)一般比較復(fù)雜。
簡(jiǎn)單的成員函數(shù)可以定義在類(lèi)內(nèi),定義在類(lèi)外的方式如下所示:
成員函數(shù)中出現(xiàn)的參數(shù)
對(duì)于成員函數(shù)中出現(xiàn)的參數(shù),首先先在成員函數(shù)內(nèi)部查找其聲明,如在成員函數(shù)內(nèi)沒(méi)找到,則在類(lèi)內(nèi)尋找,類(lèi)內(nèi)所有權(quán)限的成員都可以被考慮,即使聲明部分出現(xiàn)在函數(shù)的使用之后。
如果類(lèi)內(nèi)也沒(méi)有找到,則再到成員函數(shù)定義之前的作用域繼續(xù)尋找。
類(lèi)相關(guān)的非成員函數(shù)
這些非成員函數(shù)屬于類(lèi)的接口組成部分,但其實(shí)際上不屬于類(lèi)本身。
這些函數(shù)一般不定義在類(lèi)中。他們一般和類(lèi)的聲明放在一起,保存在同一個(gè)頭文件中。
用戶(hù)如果要使用其中任一一個(gè)函數(shù)只需要調(diào)用該頭文件即可。
自己定義的對(duì)象作為函數(shù)的形參
在類(lèi)內(nèi)也可以使用自己的類(lèi)定義變量。也可以讓另一個(gè)類(lèi)定義的變量作為屬性。
在一個(gè)類(lèi)中,類(lèi)內(nèi)的屬性都是已知的。
成員函數(shù)返回值是對(duì)象的引用
如果成員函數(shù)的返回值是對(duì)象的引用的話,則其實(shí)返回的就是調(diào)用該成員函數(shù)的對(duì)象本身。
而如果返回值類(lèi)型是對(duì)象的話,那么返回的就是對(duì)調(diào)用該成員函數(shù)的對(duì)象的一個(gè)拷貝。
后續(xù)對(duì)其進(jìn)行的更改只是更改該副本的值,不能改變?cè)瓕?duì)象。
成員函數(shù)調(diào)用成員函數(shù)
當(dāng)成員函數(shù)調(diào)用成員函數(shù)時(shí),this指針會(huì)在兩個(gè)函數(shù)之間隱式地傳遞。
內(nèi)聯(lián)函數(shù)
使用內(nèi)聯(lián)機(jī)制的函數(shù)稱(chēng)為內(nèi)聯(lián)函數(shù)。
一般的函數(shù)在調(diào)用時(shí),會(huì)先保存寄存器,并在返回時(shí)恢復(fù),并且需要拷貝實(shí)參,程序需要在新的位置進(jìn)行。這一過(guò)程效率較低。對(duì)于規(guī)模小、需要頻繁調(diào)用的函數(shù),例如在類(lèi)內(nèi)定義的成員函數(shù),調(diào)用一個(gè)函數(shù)的時(shí)間開(kāi)銷(xiāo)遠(yuǎn)遠(yuǎn)大于小規(guī)模函數(shù)體中全部語(yǔ)句的執(zhí)行時(shí)間,這種機(jī)制并不合適。
對(duì)此,C++系統(tǒng)會(huì)自動(dòng)將它們作為內(nèi)置(inline)函數(shù)來(lái)處理。程序調(diào)用內(nèi)聯(lián)函數(shù)時(shí),并不是真正地執(zhí)行函數(shù)的調(diào)用過(guò)程(如保留返回地址等處理),而是把函數(shù)代碼嵌入程序的調(diào)用點(diǎn)。這樣可以大大減少調(diào)用成員函數(shù)的時(shí)間開(kāi)銷(xiāo)。
當(dāng)然,太復(fù)雜的函數(shù)不會(huì)作為內(nèi)聯(lián)函數(shù)。
是否作為內(nèi)聯(lián)函數(shù)由編譯器自己決定,對(duì)類(lèi)內(nèi)定義的成員函數(shù),可以省略inline,因?yàn)檫@些成員函數(shù)已被隱含地指定為內(nèi)置函數(shù)。
若是在函數(shù)外定義,則可以在前面寫(xiě)inline
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++?opencv圖像處理實(shí)現(xiàn)灰度變換示例
這篇文章主要為大家介紹了C++?opencv圖像處理灰度變換的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系
這篇文章主要介紹了VC++中MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系,需要的朋友可以參考下2015-01-01詳解C++設(shè)計(jì)模式編程中策略模式的優(yōu)缺點(diǎn)及實(shí)現(xiàn)
這篇文章主要介紹了C++設(shè)計(jì)模式編程中策略模式的優(yōu)缺點(diǎn)及實(shí)現(xiàn),文中討論了策略模式中設(shè)計(jì)抽象接口的繼承和組合之間的區(qū)別,需要的朋友可以參考下2016-03-03C/C++實(shí)現(xiàn)crc碼計(jì)算和校驗(yàn)
循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check, CRC)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或計(jì)算機(jī)文件等數(shù)據(jù)產(chǎn)生簡(jiǎn)短固定位數(shù)校驗(yàn)碼的一種信道編碼技術(shù)。本文主要介紹了C++實(shí)現(xiàn)crc碼計(jì)算和校驗(yàn)的方法,需要的可以參考一下2023-03-03C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解
c++調(diào)用Python首先安裝Python,本文以win7為例,給大家詳細(xì)介紹C++調(diào)用Python基礎(chǔ)功能,需要的朋友參考下吧2017-04-04C++使用遞歸方法求n階勒讓德多項(xiàng)式完整實(shí)例
這篇文章主要介紹了C++使用遞歸方法求n階勒讓德多項(xiàng)式,涉及C++遞歸算法與浮點(diǎn)數(shù)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量
這篇文章主要為大家詳細(xì)介紹了基于Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05