欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

primary-expression ( expression-list )

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

Point pt;
pt( 3, 2 );

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

// 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 );
}

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

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

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

下標
下標運算符 ([ ])(如函數(shù)調(diào)用運算符)被視為二元運算符。下標運算符必須是采用單個參數(shù)的非靜態(tài)成員函數(shù)。此參數(shù)可以是任何類型,并指定所需的數(shù)組下標。
以下示例演示如何創(chuàng)建用于實現(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

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

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

class-type *operator–>()

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

相關(guān)文章

  • c++網(wǎng)絡(luò)編程下Linux的epoll技術(shù)和Windows下的IOCP模型

    c++網(wǎng)絡(luò)編程下Linux的epoll技術(shù)和Windows下的IOCP模型

    c++ 網(wǎng)絡(luò)編程LINUX-epoll/windows-IOCP下socket opoll函數(shù)用法 優(yōu)于select方法的epoll 以及windows下IOCP 解決多進程服務(wù)端創(chuàng)建進程資源浪費問題,感興趣的小伙伴一起來學(xué)習吧
    2021-08-08
  • C++函數(shù)模板與類模板相同與不同介紹

    C++函數(shù)模板與類模板相同與不同介紹

    C++語言的模板技術(shù)包括函數(shù)模板和類模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類是C++語言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類模板,需要的朋友可以參考下
    2022-08-08
  • 基于C語言實現(xiàn)隨機點名器(附源碼)

    基于C語言實現(xiàn)隨機點名器(附源碼)

    這篇文章主要為大家詳細介紹如何基于C語言實現(xiàn)一個簡單的隨機點名器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-07-07
  • C++位操作的常見用法小結(jié)

    C++位操作的常見用法小結(jié)

    這篇文章主要介紹了C++位操作的常見用法,包括了判斷奇偶、交換兩個數(shù)、正負轉(zhuǎn)換、求絕對值等,需要的朋友可以參考下
    2014-09-09
  • C++用read()和write()讀寫二進制文件的超詳細教程

    C++用read()和write()讀寫二進制文件的超詳細教程

    二進制的文件肉眼我們是讀不懂的,如果通過二進制的讀寫操作就可以讀懂,下面這篇文章主要給大家介紹了關(guān)于C++用read()和write()讀寫二進制文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • C語言數(shù)組實現(xiàn)打磚塊游戲

    C語言數(shù)組實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細介紹了C語言數(shù)組實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言打印華氏-攝氏溫度對照表的方法

    C語言打印華氏-攝氏溫度對照表的方法

    這篇文章主要介紹了C語言打印華氏-攝氏溫度對照表的方法,涉及C語言字符串與數(shù)字操作的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • Matlab實現(xiàn)讀寫txt文件數(shù)據(jù)與進制轉(zhuǎn)換

    Matlab實現(xiàn)讀寫txt文件數(shù)據(jù)與進制轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了Matlab實現(xiàn)讀寫txt文件數(shù)據(jù)與進制轉(zhuǎn)換的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
    2023-12-12
  • 淺析C語言編程中的數(shù)組越界問題

    淺析C語言編程中的數(shù)組越界問題

    這篇文章主要介紹了淺析C語言編程中的數(shù)組越界問題,通過內(nèi)存空間來討論其導(dǎo)致的程序崩潰問題,需要的朋友可以參考下
    2015-11-11
  • 深入sizeof的使用詳解

    深入sizeof的使用詳解

    本篇文章是對sizeof的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論