C++中的作用域案例詳解
在C++中,作用域是指程序中變量、函數(shù)和其他命名實(shí)體的可見性和可訪問性范圍。作用域規(guī)定了在代碼中的哪些位置可以引用或使用特定的標(biāo)識(shí)符。C++中有多種類型的作用域,包括全局作用域、局部作用域和命名空間作用域。
1.全局作用域:
全局作用域是在整個(gè)程序中都可見和可訪問的范圍。在全局作用域中聲明的變量和函數(shù)可以在程序的任何地方使用。全局作用域中的標(biāo)識(shí)符可以通過在其聲明之前使用::
運(yùn)算符來(lái)引用。
#include <iostream> int globalVariable = 10; void globalFunction() { std::cout << "This is a global function." << std::endl; } int main() { std::cout << globalVariable << std::endl; // 輸出:10 globalFunction(); // 輸出:"This is a global function." return 0; }
2.局部作用域:
局部作用域是指在特定代碼塊(如函數(shù)、循環(huán)或條件語(yǔ)句內(nèi)部)中定義的變量的作用域。局部變量只能在其所在的代碼塊中訪問和使用。
#include <iostream> void localFunction() { int localVar = 20; // 局部變量 std::cout << localVar << std::endl; // 輸出:20 } int main() { localFunction(); // std::cout << localVar << std::endl; // 錯(cuò)誤!局部變量在此處不可見 return 0; }
3.命名空間作用域:
命名空間作用域是指在命名空間中定義的變量、函數(shù)和其他實(shí)體的作用域。命名空間提供了一種組織和封裝代碼的方式,以避免命名沖突,并將相關(guān)的實(shí)體放在一個(gè)邏輯單元中。
#include <iostream> namespace MyNamespace { int x = 30; void namespaceFunction() { std::cout << "This is a function in MyNamespace." << std::endl; } } int main() { std::cout << MyNamespace::x << std::endl; // 輸出:30 MyNamespace::namespaceFunction(); // 輸出:"This is a function in MyNamespace." return 0; }
#pragma once #include<iostream> using namespace std; class Point { public: void setX(int x); // 設(shè)置m_X的值 int getX(); // 獲取m_X的值 void setY(int y); // 設(shè)置m_Y的值 int getY(); // 獲取m_Y的值 private: int m_X; // 點(diǎn)的x坐標(biāo) int m_Y; // 點(diǎn)的y坐標(biāo) };
這部分代碼定義了一個(gè)名為 Point 的類,用于表示一個(gè)點(diǎn)的坐標(biāo)。它具有以下公有成員函數(shù):
- void Point::setX(int x):在 Point 類的作用域內(nèi),用于設(shè)置點(diǎn)的 x 坐標(biāo)(m_X)的值。
- int Point::getX():在 Point 類的作用域內(nèi),用于獲取點(diǎn)的 x 坐標(biāo)(m_X)的值。
- void Point::setY(int y):在 Point 類的作用域內(nèi),用于設(shè)置點(diǎn)的 y 坐標(biāo)(m_Y)的值。
- int Point::getY():在 Point 類的作用域內(nèi),用于獲取點(diǎn)的 y 坐標(biāo)(m_Y)的值。
- 私有成員變量(數(shù)據(jù)成員)包括:
- int Point::m_X:在 Point 類的作用域內(nèi),表示點(diǎn)的 x 坐標(biāo)。
- int Point::m_Y:在 Point 類的作用域內(nèi),表示點(diǎn)的 y 坐標(biāo)。
void Point::setX(int x) { m_X = x; // 將傳入的x賦值給m_X } int Point::getX() { return m_X; // 返回m_X的值 } void Point::setY(int y) { m_Y = y; // 將傳入的y賦值給m_Y } int Point::getY() { return m_Y; // 返回m_Y的值 }
這部分是 Point 類成員函數(shù)的實(shí)現(xiàn)。每個(gè)成員函數(shù)的定義都在類的作用域內(nèi)。實(shí)現(xiàn)部分包括:
- void Point::setX(int x):在 Point 類的作用域內(nèi),將傳入的 x 值賦給 m_X,用于設(shè)置點(diǎn)的 x 坐標(biāo)。
- int Point::getX():在 Point 類的作用域內(nèi),返回 m_X 的值,用于獲取點(diǎn)的 x 坐標(biāo)。
- void Point::setY(int y):在 Point 類的作用域內(nèi),將傳入的 y 值賦給 m_Y,用于設(shè)置點(diǎn)的 y 坐標(biāo)。
- int Point::getY():在 Point 類的作用域內(nèi),返回 m_Y 的值,用于獲取點(diǎn)的 y 坐標(biāo)。
- 這樣,就可以在其他地方使用 Point 類,并通過調(diào)用成員函數(shù)來(lái)設(shè)置和獲取點(diǎn)的坐標(biāo)。
#include<iostream> using namespace std; #include "Point.h" int main() { Point p; // 創(chuàng)建一個(gè) Point 對(duì)象 p.setX(5); // 調(diào)用成員函數(shù)設(shè)置 x 坐標(biāo)為 5 p.setY(10); // 調(diào)用成員函數(shù)設(shè)置 y 坐標(biāo)為 10 cout << "Point coordinates: (" << p.getX() << ", " << p.getY() << ")" << endl; // 打印點(diǎn)的坐標(biāo) return 0; }
- 在 main 函數(shù)中,首先我們包含了 頭文件和 Point.h 頭文件,然后使用 using namespace std; 來(lái)簡(jiǎn)化對(duì) std 命名空間中的標(biāo)識(shí)符的使用。
- 在 main 函數(shù)的主體中,我們創(chuàng)建了一個(gè) Point 對(duì)象 p。然后使用 p.setX(5) 調(diào)用成員函數(shù) setX,將 x 坐標(biāo)設(shè)置為 5。接著使用 p.setY(10) 調(diào)用成員函數(shù) setY,將 y 坐標(biāo)設(shè)置為 10。
- 最后,我們使用 cout 對(duì)象打印點(diǎn)的坐標(biāo)。通過調(diào)用 p.getX() 和 p.getY() 獲取點(diǎn)的 x 和 y 坐標(biāo)值,并將其打印在屏幕上。
總結(jié):作用域規(guī)定了標(biāo)識(shí)符在代碼中的可見性和可訪問性。全局作用域中的標(biāo)識(shí)符可以在整個(gè)程序中使用,局部作用域中的標(biāo)識(shí)符只能在其所在的代碼塊中使用,而命名空間作用域提供了一種組織和封裝代碼的方式,以避免命名沖突。
到此這篇關(guān)于C++中的作用域的文章就介紹到這了,更多相關(guān)C++作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++報(bào)錯(cuò):Id?returned?1exit?status的解決辦法
最近剛學(xué)c語(yǔ)言,不止一次遇到了同一種報(bào)錯(cuò),經(jīng)過總結(jié)分享給大家,下面這篇文章主要給大家介紹了關(guān)于C++報(bào)錯(cuò):Id?returned?1exit?status的解決辦法,需要的朋友可以參考下2023-04-04C++用一棵紅黑樹同時(shí)封裝出set與map的實(shí)現(xiàn)代碼
set中存儲(chǔ)的一般為鍵K即可,而map存儲(chǔ)的一般都是鍵值對(duì)KV,也就是說他們結(jié)構(gòu)是不同的,那么我們?nèi)绾尾拍苡靡活w紅黑樹同時(shí)封裝出set與map兩種容器呢,那么接下來(lái)我們具體地來(lái)研究下STL庫(kù)中是怎樣實(shí)現(xiàn)的,并且進(jìn)行模擬實(shí)現(xiàn),需要的朋友可以參考下2024-03-03嵌入式C實(shí)戰(zhàn)項(xiàng)目開發(fā)技巧:對(duì)一個(gè)有規(guī)律的數(shù)組表進(jìn)行位移操作的方法
今天小編就為大家分享一篇關(guān)于嵌入式C實(shí)戰(zhàn)項(xiàng)目開發(fā)技巧:對(duì)一個(gè)有規(guī)律的數(shù)組表進(jìn)行位移操作的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11深度剖析C++對(duì)象池自動(dòng)回收技術(shù)實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于深度剖析C++對(duì)象池自動(dòng)回收技術(shù)實(shí)現(xiàn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01