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

C++?指針和對(duì)象成員訪問(wèn)的區(qū)別:`.`?與?`->`?的使用小結(jié)

 更新時(shí)間:2024年12月18日 11:49:15   作者:XuanRanDev  
在學(xué)習(xí)?C++?時(shí),常常會(huì)遇到訪問(wèn)對(duì)象成員的兩種符號(hào):.?和?->,這兩個(gè)符號(hào)看似簡(jiǎn)單,但它們的正確使用卻需要理解指針和對(duì)象的本質(zhì)差異,本文介紹C++?指針和對(duì)象成員訪問(wèn)的區(qū)別:`.`?與?`->`?的使用指南,感興趣的朋友一起看看吧

在學(xué)習(xí) C++ 時(shí),常常會(huì)遇到訪問(wèn)對(duì)象成員的兩種符號(hào):.->。這兩個(gè)符號(hào)看似簡(jiǎn)單,但它們的正確使用卻需要理解指針和對(duì)象的本質(zhì)差異。對(duì)于 C/C++ 小白來(lái)說(shuō),這篇文章將詳細(xì)解釋它們的區(qū)別,幫助你在編程時(shí)少踩坑。

一、.-> 的基本概念

在 C++ 中,.-> 是用來(lái)訪問(wèn)類(或結(jié)構(gòu)體)成員的操作符。它們的使用場(chǎng)景有所不同:

  • . (點(diǎn)號(hào)操作符):用于訪問(wèn)非指針對(duì)象的成員。
  • -> (箭頭操作符):用于訪問(wèn)指針對(duì)象所指向的成員。

這兩個(gè)操作符的作用是類似的,但它們適用的對(duì)象類型不同。

二、. 的用法

點(diǎn)號(hào)操作符 . 是最簡(jiǎn)單的成員訪問(wèn)操作符,適用于普通對(duì)象。通過(guò)對(duì)象名和點(diǎn)號(hào),我們可以直接訪問(wèn)該對(duì)象的成員函數(shù)或成員變量。

示例代碼

#include <iostream>
using namespace std;
class Stack {
public:
    void enstack(int value) {
        cout << "Value enstacked: " << value << endl;
    }
};
int main() {
    Stack s;      // 創(chuàng)建一個(gè)普通對(duì)象
    s.enstack(1); // 通過(guò) . 訪問(wèn)成員函數(shù)
    return 0;
}

輸出結(jié)果

Value enstacked: 1

在這里,s 是一個(gè)普通對(duì)象,s.enstack(1) 通過(guò)點(diǎn)號(hào)直接調(diào)用對(duì)象 senstack 函數(shù)。

總結(jié) 如果你創(chuàng)建的變量是一個(gè)普通對(duì)象(棧分配或靜態(tài)分配),就用 . 訪問(wèn)其成員。點(diǎn)號(hào)操作符只能用于非指針對(duì)象。

三、-> 的用法

箭頭操作符 -> 用于指針對(duì)象。它的作用是隱式解引用指針,訪問(wèn)指針?biāo)笇?duì)象的成員。

示例代碼

#include <iostream>
using namespace std;
class Stack {
public:
    void enstack(int value) {
        cout << "Value enstacked: " << value << endl;
    }
};
int main() {
    Stack *s = new Stack(); // 創(chuàng)建一個(gè)指針對(duì)象
    s->enstack(1);          // 通過(guò) -> 訪問(wèn)成員函數(shù)
    delete s; // 釋放動(dòng)態(tài)分配的內(nèi)存
    return 0;
}

輸出結(jié)果

Value enstacked: 1

在這里,s 是一個(gè)指向 Stack 對(duì)象的指針,s->enstack(1) 隱式解引用該指針并訪問(wèn)其成員函數(shù) enstack

總結(jié)

  • 如果你使用的是指針對(duì)象,用 -> 訪問(wèn)其成員。
  • 箭頭操作符相當(dāng)于 (*pointer).member 的簡(jiǎn)寫。

四、. -> 的等價(jià)關(guān)系

-> 實(shí)際上是 (*pointer).member 的簡(jiǎn)寫。這一點(diǎn)可以通過(guò)以下代碼理解:

示例代碼

#include <iostream>
using namespace std;
class Stack {
public:
    void enstack(int value) {
        cout << "Value enstacked: " << value << endl;
    }
};
int main() {
    Stack *s = new Stack();
    // 使用 -> 操作符
    s->enstack(1);
    // 等價(jià)于使用解引用和點(diǎn)號(hào)
    (*s).enstack(1);
    delete s; // 釋放內(nèi)存
    return 0;
}

輸出結(jié)果

Value enstacked: 1
Value enstacked: 1

通過(guò)這段代碼可以看出,s->enstack(1)(*s).enstack(1) 是完全等價(jià)的。

為什么有 ->?

如果沒(méi)有 ->,我們每次都需要先解引用指針再用點(diǎn)號(hào)訪問(wèn)成員,寫起來(lái)會(huì)顯得冗長(zhǎng)。例如:

(*pointer).memberFunction();

-> 直接簡(jiǎn)化了這一過(guò)程,代碼更簡(jiǎn)潔:

pointer->memberFunction();

五、如何判斷用哪個(gè)操作符?

檢查變量類型

  • 如果是普通對(duì)象,使用 .。
  • 如果是指針對(duì)象,使用 ->。

錯(cuò)誤提示
如果你試圖對(duì)指針對(duì)象使用 .,或者對(duì)普通對(duì)象使用 ->,編譯器會(huì)報(bào)錯(cuò):

  • type does not have member…”(類型錯(cuò)誤)。
  • 或者“invalid use of member…” 示例代碼

以下是常見(jiàn)錯(cuò)誤示例:

Stack *s = new Stack();
// 錯(cuò)誤:指針不能直接用點(diǎn)號(hào)訪問(wèn)
s.enstack(1);
// 正確:使用箭頭操作符
s->enstack(1);

六、實(shí)戰(zhàn)對(duì)比示例

以下是一個(gè)綜合示例,展示如何在不同情況下使用 .->

示例代碼

#include <iostream>
using namespace std;
class Stack {
public:
    void enstack(int value) {
        cout << "Value enstacked: " << value << endl;
    }
};
int main() {
    // 普通對(duì)象
    Stack obj;
    obj.enstack(10);
    // 指針對(duì)象
    Stack *ptr = new Stack();
    ptr->enstack(20);
    delete ptr; // 釋放內(nèi)存
    return 0;
}

輸出結(jié)果

Value enstacked: 10
Value enstacked: 20

七、注意事項(xiàng)

指針初始化

  • 使用 -> 前,確保指針已初始化,并指向有效對(duì)象,否則會(huì)導(dǎo)致未定義行為。

內(nèi)存管理

  • 對(duì)于動(dòng)態(tài)分配的對(duì)象,記得使用 delete 釋放內(nèi)存,否則會(huì)造成內(nèi)存泄漏。

智能指針

  • 在現(xiàn)代 C++ 中,推薦使用智能指針(如 std::shared_ptrstd::unique_ptr)來(lái)管理指針,減少手動(dòng)管理內(nèi)存的風(fēng)險(xiǎn)。

八、總結(jié)

  • 點(diǎn)號(hào)操作符 . 用于普通對(duì)象。
  • 箭頭操作符 -> 用于指針對(duì)象,并隱式完成了解引用操作。
  • 它們之間有明確的使用場(chǎng)景,并可以通過(guò)解引用實(shí)現(xiàn)等價(jià)轉(zhuǎn)換。

了解這些基本概念后,可以避免在訪問(wèn)對(duì)象成員時(shí)犯錯(cuò)。

到此這篇關(guān)于C++ 指針和對(duì)象成員訪問(wèn)的區(qū)別:`.` 與 `->` 的使用小結(jié)的文章就介紹到這了,更多相關(guān)C++ 指針和對(duì)象成員訪問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT中窗口關(guān)閉自動(dòng)銷毀的實(shí)現(xiàn)示例

    QT中窗口關(guān)閉自動(dòng)銷毀的實(shí)現(xiàn)示例

    這篇文章主要介紹了QT中窗口關(guān)閉自動(dòng)銷毀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • linux中查詢dns示例

    linux中查詢dns示例

    這篇文章主要介紹了linux中查詢dns示例,需要的朋友可以參考下
    2014-04-04
  • C++ 三種繼承方式及好處示例詳解

    C++ 三種繼承方式及好處示例詳解

    這篇文章主要為大家介紹了C++ 三種繼承方式及好處示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Qt 事件過(guò)濾器的具體實(shí)現(xiàn)

    Qt 事件過(guò)濾器的具體實(shí)現(xiàn)

    事件過(guò)濾器,見(jiàn)名之意,就是將事件過(guò)濾一遍,將不需要的事件都清除掉,剩下需要的事件進(jìn)行操作。本文詳細(xì)的介紹了Qt 事件過(guò)濾器的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)以實(shí)現(xiàn)函數(shù)間數(shù)據(jù)的傳遞和共享,下面這篇文章主要給大家介紹了關(guān)于C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • C語(yǔ)言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法示例

    C語(yǔ)言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法示例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)文件內(nèi)容按行隨機(jī)排列的算法,涉及C語(yǔ)言字符串、數(shù)組遍歷與隨機(jī)數(shù)相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)易掃雷

    C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)易掃雷

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)易掃雷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++ 將字符串值賦給CHAR數(shù)組的實(shí)現(xiàn)

    C++ 將字符串值賦給CHAR數(shù)組的實(shí)現(xiàn)

    這篇文章主要介紹了C++ 將字符串值賦給CHAR數(shù)組的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • C語(yǔ)言結(jié)構(gòu)體(struct)常見(jiàn)使用方法(細(xì)節(jié)問(wèn)題)

    C語(yǔ)言結(jié)構(gòu)體(struct)常見(jiàn)使用方法(細(xì)節(jié)問(wèn)題)

    這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體(struct)常見(jiàn)使用方法(細(xì)節(jié)問(wèn)題),需要的朋友可以參考下
    2017-03-03
  • C語(yǔ)言 聯(lián)合(union)用法案例詳解

    C語(yǔ)言 聯(lián)合(union)用法案例詳解

    這篇文章主要介紹了C語(yǔ)言 聯(lián)合(union)用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論