第八講 友元

2021-08-11 04:16:29 字數 3175 閱讀 8931

#include 

#include

class point

int getx()

int gety()

friend

float dist(point &a, point &b);

private: //私有資料成員

int x, y;

};float dist( point& a, point& b)

int main()

class a 

private:

int x;

}class b ;

void b::set(int i)

void b::display()

在定義物件時指定物件為常物件。常物件中的資料成員為常變數,並且必須要有初值:

例如:class time // 類定義

void

set()

int main()

const

int hour;

注意1 :常資料成員的初始化,不能採用在建構函式中對常資料成員賦初值的方法。如:

time::time(int h)

//非法

注意2 :只能通過建構函式的引數初始化表對常資料成員進行初始化,例如:

class time // 類定義

};在類外定義建構函式,初始化形式為:

time::time ( int h ): hour ( h )

在類中宣告了某乙個資料成員為常資料成員後,該類的所有物件中的該資料成員的值是不可改變的(不輸入、不賦值),但可以是不同的(由每個物件的引數初始化表決定)。

2) 常成員函式

一般的成員函式可以引用本物件中的非const 資料成員,也可以修改它們。但如果成員函式宣告為常成員函式,則只能引用本物件中的資料成員,而不能修改它們。如:

void get_time( ) const; // const位置在最後

const 是函式型別的一部分,在宣告函式和定義函式時都要用到 const 關鍵字。

常成員函式可以引用常資料成員,也可以引用非const資料成員;而常資料成員可以被常成員函式引用,也可以被非 const 成員函式引用。

|常物件成員

資料成員

非const成員函式

const 成員函式

非const 資料成員

可引用,可修改

可引用,不可修改

const 資料成員

可引用,不可修改

可引用,不可修改

常物件的資料成員

不可引用,不可修改

可引用,不可修改

怎樣使用?

1)類中如果一些資料成員需要保護,另一些資料成員不需保護,將需要保護的資料成員宣告為 const ,以保證其值不被改變。

2)類中如果所有資料成員都需保護,可以將所有資料成員都宣告成 const ,本物件的任何成員函式,都只能引用,不能改變它們。或者將這些資料成員所屬的物件宣告成const,只讓本物件的const 成員函式可引用,但不能改變。

3)如果乙個物件被定義成了常物件,只能呼叫其中的const成員函式,不能呼叫非const成員函式。

4)常成員函式不能呼叫另乙個非const成員函式

#include // 常成員函式舉例1

class time

};time::time(int h,int m,int s)

void main()

如果需要訪問常物件中的成員函式,則需要將其宣告為const,表示這是乙個常成員函式。

#include // 常成員函式舉例2

class time

int main()

要修改常物件中某個資料成員的值,則可將該資料成員宣告為mutable。舉例:

#include 

#include

using

namespace

std;

class point

int getx()

int gety()

friend

float dist(const point &p1, const point &p2);

private: //私有資料成員

int x, y;

};float dist(const point &p1, const point &p2)

int main()

class a

...private:

int x,y;

};a const a(3,4); //a是常物件,不能被更新

#include

using

namespace

std;

class r

void print();

void print() const;

private:

int r1, r2;

};void r::print()

void r::print() const

int main()

#include 

using

namespace

std;

class a ;

const

int a::b=10;

a::a(int i) : a(i)

void a::print()

常引用作形參

#include 

#include

using

namespace

std;

class point

int getx()

int gety()

friend

float dist(const point &p1, const point &p2);

private: //私有資料成員

int x, y;

};float dist(const point &p1, const point &p2)

int main()

go第八講 函式

第一講的時候,我們其實就已經使用到了函式 main函式,不知道大家注意沒有 func function name parameter list return types 函式定 析 func 函式由 func 開始宣告 function name 函式名稱,函式名和引數列表一起構成了函式簽名。par...

mongoDB第八講 分片

1.插入負載技術 分片架構圖 2.片鍵的概念和用處 看下面這個普通的集合和分片後的結果 利用key為片鍵進行自動分片 3.什麼時候用到分片呢?3.1機器的磁碟空間不足 3.2單個的mongodb伺服器已經不能滿足大量的插入操作 3.3想通過把大資料放到記憶體中來提高效能 4.分片步驟 4.1建立乙個...

第八講 Docker 容器shell

docker映象是乙個檔案系統,有時需要進入容器內部的shell,例如 檢視配置檔案的內容。正在執行的容器,可以通過docker exec命令進入它的shell終端 docker exec it bin bash 1.執行nginx映象 root qikegu docker docker run d...