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

詳解C++中的成員訪問運(yùn)算符和指針到成員運(yùn)算符

 更新時(shí)間:2016年01月12日 16:05:30   投稿:goldensun  
這篇文章主要介紹了C++中的成員訪問運(yùn)算符和指針到成員運(yùn)算符,即. 和 ->以及.* 和 ->*的使用方法,需要的朋友可以參考下

成員訪問運(yùn)算符:. 和 ->

語法

      postfix-expression
      . name
postfix-expression –> name
備注
成員訪問運(yùn)算符 . 和 -> 用來引用結(jié)構(gòu)、聯(lián)合和類的成員。成員訪問表達(dá)式具有選定成員的值和類型。
有兩種形式的成員訪問表達(dá)式:
在第一種形式中,postfix-expression 表示結(jié)構(gòu)、類或聯(lián)合類型的值,name 為指定的結(jié)構(gòu)、聯(lián)合或類的成員命名。運(yùn)算的值是 name 的值且為左值(如果 postfix-expression 是左值)。
在第二種形式中,postfix-expression 表示指向結(jié)構(gòu)、聯(lián)合或類的指針,name 為指定的結(jié)構(gòu)、聯(lián)合或類的成員命名。該值是 name 的值且是左值。 –> 運(yùn)算符取消引用該指針。因此,表達(dá)式 e–>member 和 (*e).member(其中,e 表示指針)會(huì)產(chǎn)生相同的結(jié)果(重載運(yùn)算符 –> 或 * 的情況除外)。
以下示例演示成員訪問運(yùn)算符的兩種形式。

// expre_Selection_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Date {
  Date(int i, int j, int k) : day(i), month(j), year(k){}
  int month;
  int day;
  int year;
};

int main() {
  Date mydate(1,1,1900);
  mydate.month = 2;  
  cout << mydate.month << "/" << mydate.day
     << "/" << mydate.year << endl;

  Date *mydate2 = new Date(1,1,2000);
  mydate2->month = 2;
  cout << mydate2->month << "/" << mydate2->day
     << "/" << mydate2->year << endl;
  delete mydate2;
}

這樣的話出來的兩個(gè)值分別為:

2/1/1900
2/1/2000

指針到成員運(yùn)算符:.* 和 ->*

 
語法

      expression .* expression
expression –>* expression
備注
指向成員的指針運(yùn)算符(.* 和 –>*)返回表達(dá)式左側(cè)上指定的對象的特定類成員的值。右側(cè)必須指定該類的成員。下面的示例演示如何使用這些運(yùn)算符:

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

using namespace std;

class Testpm {
public:
  void m_func1() { cout << "m_func1\n"; }
  int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and
// m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
  Testpm ATestpm;
  Testpm *pTestpm = new Testpm;

// Access the member function
  (ATestpm.*pmfn)();
  (pTestpm->*pmfn)();  // Parentheses required since * binds
            // less tightly than the function call.

// Access the member data
  ATestpm.*pmd = 1;
  pTestpm->*pmd = 2;

  cout << ATestpm.*pmd << endl
     << pTestpm->*pmd << endl;
  delete pTestpm;
}
Output
m_func1
m_func1

結(jié)果分別為:

1
2

在前面的示例中,指向成員的指針 pmfn 用于調(diào)用成員函數(shù) m_func1。另一個(gè)指向成員的指針 pmd 用于訪問 m_num 成員。
二元運(yùn)算符 .* 將其第一操作數(shù)(必須是類類型的對象)與其第二操作數(shù)(必須是指向成員的指針類型)組合在一起。
二元運(yùn)算符 –>* 將其第一操作數(shù)(必須是指向類類型的對象的指針)與其第二操作數(shù)(必須是指向成員的指針類型)組合在一起。
在包含 .* 運(yùn)算符的表達(dá)式中,第一操作數(shù)必須是類類型且可訪問,而指向第二操作數(shù)中指定的成員的指針或可訪問類型的成員的指針明確從該類派生并且可供該類訪問。
在包含 –>* 運(yùn)算符的表達(dá)方式中,第一操作數(shù)必須是第二操作數(shù)中指定的類型的“指向類類型的指針”或明確地從該類派生的類型。
考慮以下類和程序段:

// expre_Expressions_with_Pointer_Member_Operators2.cpp
// C2440 expected
class BaseClass {
public:
  BaseClass(); // Base class constructor.
  void Func1();
};

// Declare a pointer to member function Func1.
void (BaseClass::*pmfnFunc1)() = &BaseClass::Func1;

class Derived : public BaseClass {
public:
  Derived(); // Derived class constructor.
  void Func2();
};

// Declare a pointer to member function Func2.
void (Derived::*pmfnFunc2)() = &Derived::Func2;

int main() {
  BaseClass ABase;
  Derived ADerived;

  (ABase.*pmfnFunc1)();  // OK: defined for BaseClass.
  (ABase.*pmfnFunc2)();  // Error: cannot use base class to
              // access pointers to members of
              // derived classes. 

  (ADerived.*pmfnFunc1)();  // OK: Derived is unambiguously
               // derived from BaseClass. 
  (ADerived.*pmfnFunc2)();  // OK: defined for Derived.
}

指向成員的指針運(yùn)算符 .* 或 –>* 的結(jié)果是在指向成員的指針的聲明中指定的類型的對象或函數(shù)。因此,在前面的示例中,表達(dá)式 ADerived.*pmfnFunc1() 的結(jié)果是指向返回 void 的函數(shù)的指針。如果第二操作數(shù)是左值,則此結(jié)果為左值。
System_CAPS_note注意
如果某個(gè)指向成員的指針運(yùn)算符的結(jié)果是函數(shù),則該結(jié)果只能用作函數(shù)調(diào)用運(yùn)算符的操作數(shù)。

相關(guān)文章

  • c++命名對象和匿名對象的解析

    c++命名對象和匿名對象的解析

    像按值傳遞的對象(函數(shù)入?yún)?,函?shù)返回值)都是匿名對象,那匿名對象的特點(diǎn)是什么呢?下面通過實(shí)例代碼給大家解析c++命名對象和匿名對象的相關(guān)知識,感興趣的朋友一起看看吧
    2021-10-10
  • C++實(shí)現(xiàn)LeetCode(145.二叉樹的后序遍歷)

    C++實(shí)現(xiàn)LeetCode(145.二叉樹的后序遍歷)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(145.二叉樹的后序遍歷),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++?如何使用棧求解中綴、后綴表達(dá)式的值

    C++?如何使用棧求解中綴、后綴表達(dá)式的值

    這篇文章主要介紹了C++?使用棧求解中綴、后綴表達(dá)式的值,本文講解了中綴、后綴表達(dá)式的求值過程以及如何將一個(gè)中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式,需要的朋友可以參考下
    2022-10-10
  • C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于opencv實(shí)現(xiàn)車道線檢測

    基于opencv實(shí)現(xiàn)車道線檢測

    這篇文章主要為大家詳細(xì)介紹了基于opencv實(shí)現(xiàn)車道線檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 關(guān)于C語言一維數(shù)組算法問題詳解

    關(guān)于C語言一維數(shù)組算法問題詳解

    數(shù)組是以順序格式排列的均勻數(shù)據(jù)的集合,在C語言中學(xué)習(xí)數(shù)組的概念非常重要,因?yàn)樗腔镜臄?shù)據(jù)結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于C語言一維數(shù)組算法問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C/C++項(xiàng)目編譯工具簡單介紹

    C/C++項(xiàng)目編譯工具簡單介紹

    我們給大家?guī)砹艘黄P(guān)于C/C++項(xiàng)目編譯工具簡單介紹的文章,大家在項(xiàng)目編譯前可以先閱讀下。
    2019-12-12
  • C++詳解如何實(shí)現(xiàn)單鏈表

    C++詳解如何實(shí)現(xiàn)單鏈表

    線性表的鏈?zhǔn)酱鎯?chǔ)又稱為單鏈表,它是指通過一組任意的存儲(chǔ)單元來存儲(chǔ)線性表中的數(shù)據(jù)元素。本文將用C++實(shí)現(xiàn)單鏈表,需要的可以參考一下
    2022-06-06
  • 探討:用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(我作為面試官的小結(jié))

    探討:用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(我作為面試官的小結(jié))

    作為面試官的我,經(jīng)常拿這道用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的面試題來考面試者,通過對面試者的表現(xiàn)和反應(yīng),有一些統(tǒng)計(jì)和感受,在此做個(gè)小結(jié)
    2013-05-05
  • 詳解C++中的指針、數(shù)組指針與函數(shù)指針

    詳解C++中的指針、數(shù)組指針與函數(shù)指針

    本文從初學(xué)者的角度,深入淺出地講解C++中的指針、數(shù)組指針與函數(shù)指針,對最常混淆的引用傳遞、值傳遞和指針傳遞做了區(qū)處,需要的朋友可以參考下
    2015-07-07

最新評論

江西省| 肇州县| 平乡县| 苍梧县| 安龙县| 西林县| 株洲县| 宝丰县| 成武县| 郯城县| 依兰县| 轮台县| 大竹县| 吉安市| 凌海市| 神木县| 岳池县| 宝山区| 镇安县| 仁化县| 库伦旗| 康马县| 虞城县| 阿合奇县| 察隅县| 靖安县| 延庆县| 信阳市| 兰州市| 宜兴市| 镇雄县| 云和县| 温宿县| 杭锦旗| 临沭县| 白玉县| 葵青区| 凤城市| 德清县| 封开县| 禄丰县|