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

C++ 數(shù)據(jù)共享與保護

 更新時間:2021年10月09日 16:07:33   作者:AF_MAX  
C++ 數(shù)據(jù)共享與保護的基本概念,包括標(biāo)識符的作用域與可見性,對象生存期,類數(shù)據(jù)的共享,類共享數(shù)據(jù)的保護。本篇文章就介紹C++ 數(shù)據(jù)共享與保護,需要的朋友可以參考一下

1.作用域

作用域:一個標(biāo)識符在程序正文中有效的區(qū)域。

函數(shù)原型(函數(shù)聲明)作用域

例如函數(shù)原型void Print(int a);,變量a的作用域為括號左右之間。

局部作用域

例如如下函數(shù)定義,變量a的作用域為大括號之間。

void Print(){
int a = 0;
std::cout << a << std::endl;
}

類作用域

X類的成員m具有類作用域(設(shè)其一個實例對象為x),以下是在不同環(huán)境下對m的訪問方法:

1.類內(nèi)訪問:

直接通過標(biāo)識符m訪問。

2.類外訪問:

普通成員通過x.m
類成員通過X::m
對象指針通過ptr->m

命名空間作用域

在XX命名空間中聲明的對象m,其作用域在命名空間之內(nèi)。命名空間外想訪問該對象要以XX::m的方式進行。

namespace XX{  // 命名空間中聲明
 void Print();
}

XX::Print(){  // 命名空間外定義
 //Print函數(shù)的定義
}

XX::Print()  // 命名空間外使用



using語句可以簡化對命名空間內(nèi)對象的訪問:

  • 1.使用using XX::Print;語句后,其后只需要通過Print就可以調(diào)用該函數(shù)對象。
  • 2.使用using namespace XX;語句后,其后只需要通過函數(shù)名就可以調(diào)用XX命名空間下的對象。

2.可見性

可見性:程序運行到某一點,能夠引用到的標(biāo)識符,稱該標(biāo)識符為可見的。
可見性隱藏規(guī)則:在多個具有包含關(guān)系的作用域聲明的同名標(biāo)識符,外層標(biāo)識符在內(nèi)層不可見。
全局變量:可以被本程序所有對象或函數(shù)引用。

  • 在默認(rèn)(全局)命名空間內(nèi)聲明的對象為全局變量,默認(rèn)本編譯單元內(nèi)可以引用。
  • 通過關(guān)鍵詞extern聲明引用的全局變量為其他編譯單元中已經(jīng)定義的全局變量。
  • 通過關(guān)鍵詞static聲明的全局變量只能在本編譯單元中使用,不能在其他編譯單元用extern聲明引用。

局部變量:只能在內(nèi)部作用域內(nèi)被引用

3.對象的生存期

生存期:從對象內(nèi)存空間被分配到被釋放的期間。

靜態(tài)生存期:對象的生存期與程序的運行期相同。

  • 1.在命名空間內(nèi)聲明的對象都具有靜態(tài)生存期。
  • 2.在局部作用域中用static關(guān)鍵詞聲明的對象具有靜態(tài)生存期,在對應(yīng)局部作用域中具有可見性。

動態(tài)生存期:對象的生存期為聲明點到聲明點所在作用域的結(jié)束點之間。

4.類數(shù)據(jù)的共享

面向結(jié)構(gòu)編程:

程序模塊:函數(shù)
數(shù)據(jù)共享方式:參數(shù)傳遞、全局變量

面向?qū)ο缶幊蹋?/strong>

程序模塊:
數(shù)據(jù)共享方式:類的靜態(tài)成員(類內(nèi)數(shù)據(jù)共享)、類的友元(類外數(shù)據(jù)共享)

類的靜態(tài)數(shù)據(jù)成員(類屬性):類變量由該類所有實例對象共享,用static修飾。
設(shè)X類的靜態(tài)成員為m,類的一個實例對象為x:

  • 類的靜態(tài)變量必須類內(nèi)聲明,類外定義。
  • 在類的第一個實例對象初始化前初始化,在內(nèi)存上只有一份副本。
  • 類外定義時通過X::m進行引用,定義后可以通過實例對象進行引用,如x.m。

類的靜態(tài)函數(shù)成員(類方法):主要是處理類屬性或者處理該類下多個實例對象的方法,用static修飾。
設(shè)X類的靜態(tài)函數(shù)為func,類的一個實例對象為x:

  • 可以直接訪問該類的靜態(tài)數(shù)據(jù)和函數(shù)成員,不能訪問非靜態(tài)成員。
  • 可以在類的第一個實例對象初始化前通過X::func進行調(diào)用。
  • 在實例對象初始化可以通過x.func調(diào)用,但是為了代碼的可讀性,不推薦這樣使用。
// 靜態(tài)成員案例
#include<iostream>
using namespace std;


class A {
public:
 static int s_count;  // 私有靜態(tài)數(shù)據(jù)成員聲明
 
 static void set_count(int i) { // 靜態(tài)方法定義
  s_count = i;
 }

 void UsingCount(){
  s_count++;
 }

};


int A::s_count = 0;  // 私有靜態(tài)數(shù)據(jù)成員類外定義(注意要在前面加上數(shù)據(jù)的類型說明符)


int main() {
 A::s_count;   // 通過類名調(diào)用
 A::set_count(11); // 對象初始化前通過靜態(tài)函數(shù)成員訪問

 A a1;
 a1.UsingCount();   // 通過普通函數(shù)成員修改靜態(tài)數(shù)據(jù)成員
 cout << a1.s_count << endl; // 通過對象訪問靜態(tài)數(shù)據(jù)成員

 A a2;
 a2.UsingCount();
 cout << a2.s_count << endl; // 如果輸出結(jié)果是13,則證明靜態(tài)數(shù)據(jù)成員是共享的

}

輸出結(jié)果:

12
13

友元關(guān)系:一個類主動聲明其他類或函數(shù)是他的友元,進而給他們提供本類的訪問特許,用friend修飾。
友元函數(shù):被一個類聲明為友元的函數(shù),在他的函數(shù)體內(nèi)可以通過對象名訪問類的私有和保護成員。
友元類:被一個類A聲明為友元的另一個類B,類B內(nèi)所有成員函數(shù)都是類A的友元函數(shù)。

//友元數(shù)據(jù)共享案例
#include<iostream>
using namespace std;


class A {
private:
 int m_nums = 10;   // 私有數(shù)據(jù)成員

friend class B;    // 友元類聲明
};


class B { // 友元類
public:
 void Print(A& a) { // 友元函數(shù)
  cout << a.m_nums << endl; // 通過對象名訪問私有成員
 }
};


int main() {
 A a;
 B b;
 b.Print(a);   // 訪問私有數(shù)據(jù)成員
}

結(jié)果輸出:

10
1

5.類共享數(shù)據(jù)的保護

常對象:常對象的數(shù)據(jù)成員值在對象整個生存期間不能被更改。
設(shè)A類的常對象為a,常函數(shù)成員為func,常數(shù)據(jù)成員為m

  • 1. 聲明語法:const A a;
  • 2. 常對象必須進行初始化,而且不能被更新(不能賦值或者調(diào)用普通成員函數(shù))。
  • 3. 常對象只能調(diào)用常函數(shù)成員。

常函數(shù)成員:能被常對象調(diào)用訪問常數(shù)據(jù)成員。

  • 1. 常函數(shù)成員聲明語法:返回值類型 func(參數(shù)表)const;
  • 2. 常函數(shù)成員定義部分時要帶上const
  • 3. 常函數(shù)調(diào)用期間,因為目標(biāo)對象視為常對象,所以只能調(diào)用常函數(shù)。
  • 4. const可以用于函數(shù)重載,通過非const對象調(diào)用重載函數(shù)優(yōu)先調(diào)用非const的重載函數(shù)。

常數(shù)據(jù)成員:值在初始化后不能被更新。

  • 1. 常數(shù)據(jù)成員聲明語法:const 數(shù)據(jù)類型 m;。
  • 2. 常數(shù)據(jù)成員不能被賦值,構(gòu)造函數(shù)只能通過初始化列表進行初始化。
  • 3. 靜態(tài)常數(shù)據(jù)成員在類外進行定義。
//常成員案例
#include<iostream>
using namespace std;


class A {
public:
 void Print()const {  // 不修改對象數(shù)據(jù)成員值的函數(shù)應(yīng)該設(shè)為常函數(shù)
  cout << a << ',' << b << ',' << s << endl;
 }

 A(int i) :b(i) {};  // 初始化列表初始化

private:
 const int a = 1; // 已初始化的常數(shù)據(jù)成員
 const int b;  // 未初始化的常數(shù)據(jù)成員
 const static int s; // 常靜態(tài)數(shù)據(jù)成員

};


const int A::s = 3;   // 類外定義


int main() {
 A a(2);
 a.Print();   
}

結(jié)果輸出:

1,2,3
1

常引用:常引用所引用的對象被視為常對象。

  • 1. 常引用聲明語法:const 數(shù)據(jù)類型 &引用名。
  • 2.非const的引用只能綁定到普通對象。
  • 3. 對于無需修改值的參數(shù)(復(fù)制構(gòu)造函數(shù)),盡量使用const進行應(yīng)用

到此這篇關(guān)于C++ 數(shù)據(jù)共享與保護的文章就介紹到這了,更多相關(guān)C++ 數(shù)據(jù)共享與保護內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言strtod()函數(shù)案例詳解

    C語言strtod()函數(shù)案例詳解

    這篇文章主要介紹了C語言strtod()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 深入理解c語言數(shù)組

    深入理解c語言數(shù)組

    這篇文章主要介紹了c語言數(shù)組,有需要的朋友可以參考一下
    2013-12-12
  • 簡單實現(xiàn)C語言2048游戲

    簡單實現(xiàn)C語言2048游戲

    這篇文章主要為大家詳細(xì)介紹了簡單實現(xiàn)C語言2048游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    本文主要介紹了VisualStudio2022 cmake配置opencv開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 詳解C++如何實現(xiàn)在Word文檔中創(chuàng)建列表

    詳解C++如何實現(xiàn)在Word文檔中創(chuàng)建列表

    這篇文章主要為大家詳細(xì)介紹了介紹如何使用C++在Word文檔中創(chuàng)建編號列表、項目符號列表和多級列表,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • C語言中調(diào)用匯編語言詳解

    C語言中調(diào)用匯編語言詳解

    這篇文章主要介紹了C語言中調(diào)用匯編語言,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • c++內(nèi)聯(lián)函數(shù)(inline)使用詳解

    c++內(nèi)聯(lián)函數(shù)(inline)使用詳解

    這篇文章主要介紹了c++內(nèi)聯(lián)函數(shù)(inline)使用詳解,需要的朋友可以參考下
    2014-04-04
  • C語言實現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)

    C語言實現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 解析c++ 中智能指針引用計數(shù)為什么不是0原理

    解析c++ 中智能指針引用計數(shù)為什么不是0原理

    這篇文章主要為大家介紹了C語言中智能指針引用計數(shù)為什么不是0原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • C++實現(xiàn)接兩個鏈表實例代碼

    C++實現(xiàn)接兩個鏈表實例代碼

    這篇文章主要介紹了C++實現(xiàn)接兩個鏈表實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論