最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++中的函數(shù)調(diào)用和下標(biāo)以及成員訪問運(yùn)算符的重載

 更新時(shí)間:2016年01月21日 14:51:46   投稿:goldensun  
這篇文章主要介紹了詳解C++中的函數(shù)調(diào)用和下標(biāo)以及成員訪問運(yùn)算符,講到了這些二元運(yùn)算符使用的語法及重載,需要的朋友可以參考下

函數(shù)調(diào)用
使用括號(hào)調(diào)用的函數(shù)調(diào)用運(yùn)算符是二元運(yùn)算符。
語法

primary-expression ( expression-list )

備注
在此上下文中,primary-expression 為第一個(gè)操作數(shù),并且 expression-list(可能為參數(shù)的空列表)為第二個(gè)操作數(shù)。函數(shù)調(diào)用運(yùn)算符用于需要大量參數(shù)的操作。這之所以有效,是因?yàn)?expression-list 是列表而非單一操作數(shù)。函數(shù)調(diào)用運(yùn)算符必須是非靜態(tài)成員函數(shù)。
函數(shù)調(diào)用運(yùn)算符在重載時(shí)不會(huì)修改函數(shù)的調(diào)用方式;相反,它會(huì)在運(yùn)算符應(yīng)用于給定類的類型的對(duì)象時(shí)修改解釋該運(yùn)算符的方式。例如,以下代碼通常沒有意義:

Point pt;
pt( 3, 2 );

但是,如果存在一個(gè)適當(dāng)?shù)闹剌d函數(shù)調(diào)用運(yùn)算符,則此語法可用于將 x 坐標(biāo)偏移 3 個(gè)單位并將 y 坐標(biāo)偏移 2 個(gè)單位。下面的代碼顯示了這樣的定義:

// function_call.cpp
class Point
{
public:
  Point() { _x = _y = 0; }
  Point &operator()( int dx, int dy )
    { _x += dx; _y += dy; return *this; }
private:
  int _x, _y;
};

int main()
{
  Point pt;
  pt( 3, 2 );
}

請(qǐng)注意,函數(shù)調(diào)用運(yùn)算符適用于對(duì)象的名稱,而不是函數(shù)的名稱。
也可以使用指向函數(shù)的指針(而非該函數(shù)本身)重載函數(shù)調(diào)用運(yùn)算符。

typedef void(*ptf)();
void func()
{
}
struct S
{
  operator ptf()
  {
   return func;
  }
};

int main()
{
  S s;
  s();//operates as s.operator ptf()()
}

下標(biāo)
下標(biāo)運(yùn)算符 ([ ])(如函數(shù)調(diào)用運(yùn)算符)被視為二元運(yùn)算符。下標(biāo)運(yùn)算符必須是采用單個(gè)參數(shù)的非靜態(tài)成員函數(shù)。此參數(shù)可以是任何類型,并指定所需的數(shù)組下標(biāo)。
以下示例演示如何創(chuàng)建用于實(shí)現(xiàn)邊界檢查的 int 類型的矢量:

// subscripting.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class IntVector {
public:
  IntVector( int cElements );
  ~IntVector() { delete [] _iElements; }
  int& operator[]( int nSubscript );
private:
  int *_iElements;
  int _iUpperBound;
};

// Construct an IntVector.
IntVector::IntVector( int cElements ) {
  _iElements = new int[cElements];
  _iUpperBound = cElements;
}

// Subscript operator for IntVector.
int& IntVector::operator[]( int nSubscript ) {
  static int iErr = -1;

  if( nSubscript >= 0 && nSubscript < _iUpperBound )
   return _iElements[nSubscript];
  else {
   clog << "Array bounds violation." << endl;
   return iErr;
  }
}

// Test the IntVector class.
int main() {
  IntVector v( 10 );
  int i;

  for( i = 0; i <= 10; ++i )
   v[i] = i;

  v[3] = v[9];

  for ( i = 0; i <= 10; ++i )
   cout << "Element: [" << i << "] = " << v[i] << endl;
}
Array bounds violation.
Element: [0] = 0
Element: [1] = 1
Element: [2] = 2
Element: [3] = 9
Element: [4] = 4
Element: [5] = 5
Element: [6] = 6
Element: [7] = 7
Element: [8] = 8
Element: [9] = 9
Array bounds violation.
Element: [10] = 10

注釋
當(dāng) i 在前一個(gè)程序中達(dá)到 10 時(shí),operator[] 將檢測(cè)是否在使用超出邊界的下標(biāo)并發(fā)出錯(cuò)誤消息。
請(qǐng)注意,函數(shù) operator[] 將返回引用類型。這會(huì)使它成為左值,從而使您可以在賦值運(yùn)算符的任何一側(cè)使用下標(biāo)表達(dá)式。

成員訪問
類成員訪問可通過重載成員訪問運(yùn)算符 (–>) 來控制。此運(yùn)算符被視為此用法中的一元運(yùn)算符,而重載運(yùn)算符函數(shù)必須是類成員函數(shù)。因此,此類函數(shù)的聲明是:
語法

class-type *operator–>()

備注
其中,class-type 是此運(yùn)算符所屬的類的名稱。成員訪問運(yùn)算符函數(shù)必須是非靜態(tài)成員函數(shù)。
此運(yùn)算符(通常與指針取消引用運(yùn)算符一起使用)用于實(shí)現(xiàn)在取消引用用法或?qū)τ梅ㄓ?jì)數(shù)前驗(yàn)證指針的“智能指針”。
無法重載 . 成員訪問運(yùn)算符。

相關(guān)文章

  • C++的static靜態(tài)成員你有了解嗎

    C++的static靜態(tài)成員你有了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的static靜態(tài)成員,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++從txt文件中讀取二維的數(shù)組方法

    C++從txt文件中讀取二維的數(shù)組方法

    今天小編就為大家分享一篇C++從txt文件中讀取二維的數(shù)組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++ 的三種訪問權(quán)限與三種繼承方式

    C++ 的三種訪問權(quán)限與三種繼承方式

    我們知道C++中的類,有三種訪問權(quán)限(也稱作訪問控制),它們分別是public、protected、private,C++中繼承的方式還有多種。下面通過本文給大家詳細(xì)介紹,對(duì)c++中的訪問權(quán)限和繼承方式感興趣的朋友一起看看吧
    2016-11-11
  • C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng)

    C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 如何區(qū)分C++中的inline和#define宏

    如何區(qū)分C++中的inline和#define宏

    這篇文章主要介紹了如何區(qū)分C++中的inline和#define宏,文中講解非常詳細(xì),代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C語言 指針數(shù)組詳解及示例代碼

    C語言 指針數(shù)組詳解及示例代碼

    本文主要介紹C語言 指針數(shù)組,這里提供詳細(xì)的資料和簡單示例代碼以便大家學(xué)習(xí)參考,有需要學(xué)習(xí)的小伙伴可以參考下
    2016-08-08
  • Visual C++中MFC消息的分類

    Visual C++中MFC消息的分類

    標(biāo)準(zhǔn)(窗口)消息:窗口消息一般與窗口內(nèi)部運(yùn)作有關(guān),如創(chuàng)建窗口,繪制窗口,銷毀窗口,通常,消息是從系統(tǒng)發(fā)到窗口,或從窗口發(fā)到系統(tǒng)
    2012-11-11
  • C語言實(shí)現(xiàn)模擬銀行系統(tǒng)

    C語言實(shí)現(xiàn)模擬銀行系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)模擬銀行系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 深入理解C++的對(duì)象模型

    深入理解C++的對(duì)象模型

    本文在介紹C++使用的對(duì)象模型之前,先介紹了2種對(duì)象模型:簡單對(duì)象模型(a simple object model)和表格驅(qū)動(dòng)對(duì)象模型(a table-driven object model),這樣介紹對(duì)后面的內(nèi)容更有幫助,有需要的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • MFC控件之CListCtrl的應(yīng)用實(shí)例教程

    MFC控件之CListCtrl的應(yīng)用實(shí)例教程

    這篇文章主要介紹了MFC控件中CListCtrl的應(yīng)用方法,包括了針對(duì)表格的一些操作,是MFC中比較重要的一個(gè)控件類,需要的朋友可以參考下
    2014-08-08

最新評(píng)論

杭州市| 宜昌市| 安远县| 谢通门县| 肇东市| 婺源县| 龙口市| 阿勒泰市| 商都县| 咸丰县| 成都市| 澄城县| 霍邱县| 托克逊县| 龙川县| 四川省| 信丰县| 平塘县| 泸定县| 乌鲁木齐县| 邮箱| 田阳县| 赤壁市| 射阳县| 南澳县| 九江市| 澳门| 长泰县| 枞阳县| 桑日县| 上杭县| 防城港市| 安图县| 克山县| 厦门市| 安远县| 金溪县| 息烽县| 防城港市| 文登市| 五大连池市|