最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 中 const 和 static 關(guān)鍵字用法及定義

 更新時(shí)間:2025年09月19日 10:27:46   作者:小小小~  
本文給大家介紹C++中const和static 關(guān)鍵字用法及定義,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、static 定義及用途

static 作用: 控制變量的存儲(chǔ)方式和可見性
1、修飾局部變量:
通常局部變量在程序中存放棧區(qū),局部的生命周期在包含語(yǔ)句塊執(zhí)行完時(shí)便會(huì)結(jié)束,使用 static 關(guān)鍵字對(duì)局部變量修飾后,變量會(huì)存放靜態(tài)數(shù)據(jù)區(qū),其生命周期會(huì)延續(xù)到整個(gè)程序結(jié)束。
但是作用域沒有改變,作用域還是限制在其他語(yǔ)句塊中。
個(gè)人理解: static 修飾局部變量,可認(rèn)為是 延長(zhǎng)變量生命周期的局部變量(不會(huì)隨著函數(shù)結(jié)束而是放)
2、修飾全局變量:
對(duì)于一個(gè)全局變量,它既可以在本文件中被訪問到,也可以在同一個(gè)?程中其它源?件被訪問(添加 extern進(jìn)?聲明即可)。? static 對(duì)全局變量修飾改變了其作用域范圍,由原來(lái)的整個(gè)?程可?變成了本?件可?。
3、修飾函數(shù):
和全局變量一樣 ,改變作用域,限制在本文件使用。
4、修飾類 :
對(duì)類中某函數(shù)修飾,表示該函數(shù)屬于一個(gè)類,而不是此類的任何對(duì)象 ;
對(duì)類中某一個(gè)變量修飾 , 便是該變量為所有對(duì)象所有,存儲(chǔ)空間中只有一個(gè)副本,可以通 過類和對(duì)象調(diào)用。
(補(bǔ)充:靜態(tài)非常量數(shù)據(jù)成員,其只能在類外定義和初始化,在類內(nèi)僅是聲明而已。)
樣例如下;

5:類成員/類函數(shù)聲明
函數(shù)體內(nèi) static 變量范圍為該函數(shù)體,不同于 auto 變量,該變量的內(nèi)存只被分配?次,因此其值在下次調(diào)?時(shí)仍維持上次的值;
在模塊內(nèi)的 static 全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;
在模塊內(nèi)的 static 函數(shù)只可被這?模塊內(nèi)的其它函數(shù)調(diào)?,這個(gè)函數(shù)的使?范圍被限制在聲明它的模塊內(nèi);
在類中的 static 成員變量屬于整個(gè)類所擁有,對(duì)類的所有對(duì)象只有一份拷貝;
在類中的 static 成員函數(shù)屬于整個(gè)類所擁有,這個(gè)函數(shù)不接收this 指針,因?只能訪問類的static 成員變量。 static類對(duì)象必須要在類外進(jìn)?初始化, static 修飾的變量先于對(duì)象存在,所以 static 修飾的變量要在類外初始化;
由于 static 修飾的類成員屬于類,不屬于對(duì)象,因此 static 類成員函數(shù)是沒有 this 指針, this 指針是指向本對(duì)象的指針,正因?yàn)闆]有this 指針,所以 static 類成員函數(shù)不能訪問? static 的類成員,只能訪問 static修飾的類成員;
static 成員函數(shù)不能被 virtual 修飾, static 成員不屬于任何對(duì)象或?qū)嵗?,所以加?virtual沒有任何實(shí)際意義;靜態(tài)成員函數(shù)沒有 this 指針,虛函數(shù)的實(shí)現(xiàn)是為每?個(gè)對(duì)象分配?個(gè) vptr 指針,? vptr 是通過 this 指針調(diào)?的,所以不能為virtual;虛函數(shù)的調(diào)?關(guān)系,this->vptr->ctable->virtual function。

class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
  //靜態(tài)函數(shù)
   	static void func()
	{
		//m_age = 50;   靜態(tài)函數(shù)只能訪問靜態(tài)變量
		m_score = 99;
		cout << m_score << endl;
	}
	string m_name;
	int m_age;
   //靜態(tài)成員變量   類內(nèi)聲明
	static int m_score; 
};
int Person::m_score = 100; //靜態(tài)變量 類外初始化
int main()
{
	Person p1("張三" , 18);
	Person p2("李四", 20);
	cout << "成績(jī) " << p1.m_score << endl; //通過類對(duì)象訪問
	p2.m_score = 80; //靜態(tài)變量 只有一個(gè)副本,一個(gè)內(nèi)存空間
	cout<< "成績(jī) " << p2.m_score << endl; 
  //靜態(tài)函數(shù)調(diào)用
	Person::func();    // 通過類調(diào)用
	p1.func();         //通過類對(duì)象調(diào)用
	return 0;
}

二、const 定義及用途

const 作用:限制可讀性
1、const修飾基礎(chǔ)數(shù)據(jù)類型
const 在基礎(chǔ)數(shù)據(jù)類型前、后結(jié)果一樣,在使用這些常量的時(shí)候不能改變常量的值。修飾符 const 可以?在類型說明符前,也可以用在類型說明符后,其結(jié)果是一樣的。在使用這些常量的時(shí)候,只要不改變這些常量的值即可。

const int Max = 100;
int const Min = 1;
void demo()
{
	//Max = 110; 常量不可修改
	//Min = 2;   常量只讀性
	cout << Max << Min << endl;
}

2、修飾指針變量和引用變量
如果const 在 * 左側(cè) ,則const修飾指針?biāo)赶虻淖兞?,即指針指向常量

如果const 在 * 右側(cè) ,則const修飾指針本身 ,即指針本身為常量。

int a = 10, b = 20;
//使 指針指向常量   (指針指向可改 ,指向的值不可以更改)
const int* p1 = &a;  
p1 = &b;
//*p1 = 100;              錯(cuò)誤用法
 //使 指針本身為常量  (指針指向不可改 ,指向的值可以更改)
int* const p2 = &b; 
//p2 = &a;              錯(cuò)誤用法
*p2 = 100;

3、const 修飾普通函數(shù)
防止傳入的參數(shù)在函數(shù)體內(nèi)被改變,但僅對(duì)指針、引用有意義。因?yàn)槿绻前粗祩鬟f,傳給參數(shù)的僅僅是實(shí)參的副本,即使在函數(shù)體內(nèi)改變了形參,實(shí)參也不會(huì)得到影響。如:

void func(const int i)
{
	//i = 10;  不能修改i
	cout << i << endl;
}

const修飾的函數(shù)參數(shù)是指針時(shí),代表 在函數(shù)體內(nèi)不能修改該指針?biāo)傅膬?nèi)容,起到保護(hù)作用:

void fun(const char * src, char * des)
{  
  //保護(hù)源字符串不被修改,若修改src則編譯出錯(cuò)。
	strcpy(des,src);
}

const 修飾函數(shù)返回值
用const來(lái)修飾返回的指針或引用,保護(hù)指針指向的內(nèi)容或引用的內(nèi)容不被修改。

//const 修飾函數(shù)返回值 
const int* getNum(int* a)
{
	return a;
}
int a = 10;
auto ret= getNum(&a);
//ret = 20  返回值不能修改

4、const 在類中的?法:
const 成員變量,只在某個(gè)對(duì)象生命周期內(nèi)是常量。對(duì)于整個(gè)類而言是可以改變的。因?yàn)轭惪梢詣?chuàng)建多個(gè)對(duì)象,不同的對(duì)象其 const 數(shù)據(jù)成員值可以不同。所以不能在類的聲明中初始化 const 數(shù)據(jù)成員,因?yàn)轭惖膶?duì)象在沒有創(chuàng)建時(shí)候,編譯器不知道 const 數(shù)據(jù)成員的值是什么 const 數(shù)據(jù)成員的初始化只能在類的構(gòu)造函數(shù)的初始化列表中進(jìn)?。

const 成員函數(shù):
const 成員函數(shù)的主要?的是防?成員函數(shù)修改對(duì)象的內(nèi)容。要注意 const 關(guān)鍵字和 static 關(guān)鍵字對(duì)于成員函數(shù)來(lái)說是不能同時(shí)使?的,因?yàn)?static 關(guān)鍵字修飾靜態(tài)成員 函數(shù)不含有 this 指針,即不能實(shí)例化 const 成員函數(shù)?必須具體到某?個(gè)函數(shù)。

常量對(duì)象:
常量對(duì)象只能調(diào)用常量函數(shù),別的成員函數(shù)都不能調(diào)用。

補(bǔ)充: const 成員函數(shù)中如果實(shí)在想修改某個(gè)變量,可以使用mutable進(jìn)行修飾。成員變量中如果想建立在整個(gè)類中都恒定的常量,應(yīng)該用類中的枚舉常量來(lái)實(shí)現(xiàn)或者 static const。

class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
	//常函數(shù)
	void func() const
	{
		m_sore = 100;
	}
	//普通成員函數(shù)
	void Print()
	{
		cout << "姓名: " << this->m_name << "  年紀(jì):" << this->m_age << end;
	}
	string m_name;
	int m_age;
	mutable int m_sore =60;  //特殊變量
};
int main()
{
	const Person p("張三", 18);  // 常對(duì)象
	//常對(duì)象調(diào)用常函數(shù)
	p.func();
	//p.Print();  常對(duì)象只能調(diào)用常函數(shù)
	p.m_sore = 160;   //m_sore 為特殊變量只能在常對(duì)象下修改
	cout << p.m_sore << endl;
	system("pause");
	return 0;
}

到此這篇關(guān)于C++ 中 const 和 static 關(guān)鍵字用法及定義的文章就介紹到這了,更多相關(guān)C++ const 和 static用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

辰溪县| 吴川市| 杭州市| 北宁市| 安远县| 辽阳县| 安义县| 犍为县| 岗巴县| 威信县| 靖边县| 内江市| 宜宾市| 岑巩县| 昭通市| 上犹县| 泊头市| 玉屏| 襄垣县| 广饶县| 彭泽县| 河间市| 图木舒克市| 金溪县| 大洼县| 青海省| 梁河县| 普定县| 武冈市| 吕梁市| 舟曲县| 新田县| 阳高县| 海丰县| 维西| 江北区| 珲春市| 奈曼旗| 汝城县| 台湾省| 博爱县|