詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制
下面隨筆說明C++共享數(shù)據(jù)保護(hù)機(jī)制。
共享數(shù)據(jù)的保護(hù)
對(duì)于既需要共享、又需要防止改變的數(shù)據(jù)應(yīng)該聲明為常類型(用const進(jìn)行修飾)。
對(duì)于不改變對(duì)象狀態(tài)的成員函數(shù)應(yīng)該聲明為常函數(shù)。
(1)常類型
?、俪?duì)象:必須進(jìn)行初始化,不能被更新。
const 類名 對(duì)象名
?、诔3蓡T
用const進(jìn)行修飾的類成員:常數(shù)據(jù)成員和常函數(shù)成員
?、鄢R茫罕灰玫膶?duì)象不能被更新。
const 類型說明符 &引用名
?、艹?shù)組:數(shù)組元素不能被更新(詳見第6章)。
類型說明符 const 數(shù)組名[大小]...
⑤常指針:指向常量的指針(詳見第6章)。
(2)常對(duì)象
用const修飾的對(duì)象
例:
class A
{
public:
A(int i,int j) {x=i; y=j;}
...
private:
int x,y;
};
A const a(3,4); //a是常對(duì)象,不能被更新
(3)常成員
用const修飾的對(duì)象成員
①常成員函數(shù)
使用const關(guān)鍵字說明的函數(shù)。
常成員函數(shù)不更新對(duì)象的數(shù)據(jù)成員。
常成員函數(shù)說明格式:
類型說明符 函數(shù)名(參數(shù)表)const;
這里,const是函數(shù)類型的一個(gè)組成部分,因此在實(shí)現(xiàn)部分也要帶const關(guān)鍵字。
const關(guān)鍵字可以被用于參與對(duì)重載函數(shù)的區(qū)分
通過常對(duì)象只能調(diào)用它的常成員函數(shù)。
②常數(shù)據(jù)成員
使用const說明的數(shù)據(jù)成員。
//常成員函數(shù)舉例
#include<iostream>
using namespace std;
class R {
public:
R(int r1, int r2) : r1(r1), r2(r2) { }
void print();
void print() const;
private:
int r1, r2;
};
void R::print() {
cout << r1 << ":" << r2 << endl;
}
void R::print() const {
cout << r1 << ";" << r2 << endl;
}
int main() {
R a(5,4);
a.print(); //調(diào)用void print()
const R b(20,52);
b.print(); //調(diào)用void print() const
return 0;
}
//常數(shù)據(jù)成員舉例
#include <iostream>
using namespace std;
class A {
public:
A(int i);
void print();
private:
const int a;
static const int b; //靜態(tài)常數(shù)據(jù)成員
};
const int A::b=10;
A::A(int i) : a(i) { }
void A::print() {
cout << a << ":" << b <<endl;
}
int main() {
//建立對(duì)象a和b,并以100和0作為初值,分別調(diào)用構(gòu)造函數(shù),
//通過構(gòu)造函數(shù)的初始化列表給對(duì)象的常數(shù)據(jù)成員賦初值
A a1(100), a2(0);
a1.print();
a2.print();
return 0;
}
(4)常引用
如果在聲明引用時(shí)用const修飾,被聲明的引用就是常引用。
常引用所引用的對(duì)象不能被更新。
如果用常引用做形參,便不會(huì)意外地發(fā)生對(duì)實(shí)參的更改。常引用的聲明形式如下:
const 類型說明符 &引用名;
//常引用作形參
#include <iostream>
#include <cmath>
using namespace std;
class Point { //Point類定義
public: //外部接口
Point(int x = 0, int y = 0)
: x(x), y(y) { }
int getX() { return x; }
int getY() { return y; }
friend float dist(const Point &p1,const Point &p2);
private: //私有數(shù)據(jù)成員
int x, y;
};
float dist(const Point &p1, const Point &p2) {
double x = p1.x - p2.x;
double y = p1.y - p2.y;
return static_cast<float>(sqrt(x*x+y*y));
}
int main() { //主函數(shù)
const Point myp1(1, 1), myp2(4, 5);
cout << "The distance is: ";
cout << dist(myp1, myp2) << endl;
return 0;
}
以上就是詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于C++ 共享數(shù)據(jù)保護(hù)機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
實(shí)例講解C++編程中l(wèi)ambda表達(dá)式的使用
這篇文章主要介紹了C++編程中l(wèi)ambda表達(dá)式的使用實(shí)例,lambda表達(dá)式特性的引入在C++11中可謂千呼萬喚始出來,非常重要,需要的朋友可以參考下2016-01-01
C語言每日練習(xí)之動(dòng)態(tài)顯示系統(tǒng)時(shí)間
這篇文章主要介紹了C語言動(dòng)態(tài)顯示系統(tǒng)時(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
C語言創(chuàng)建動(dòng)態(tài)dll和調(diào)用dll(visual studio 2013環(huán)境下)
本篇文章主要介紹了C語言創(chuàng)建動(dòng)態(tài)dll和調(diào)用dll(visual studio 2013環(huán)境下),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-11-11
Qt利用QSortFilterProxyModel代理實(shí)現(xiàn)自定義排序與聯(lián)合過濾
QsortFilterProxyModel類用來為model和view之間提供強(qiáng)大的排序和過濾支持。這篇文章將利用QSortFilterProxyModel代理實(shí)現(xiàn)自定義排序與聯(lián)合過濾,需要的可以參考一下2022-11-11
C語言內(nèi)存函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了C語言內(nèi)存函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

