C++中的static函數(shù)和const函數(shù)
超過十多年行業(yè)經(jīng)驗,技術領先,服務至上的經(jīng)營模式,全靠網(wǎng)絡和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務范圍包括了:成都網(wǎng)站設計、成都網(wǎng)站建設,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡托管,小程序制作,微信開發(fā),app軟件開發(fā)公司,同時也可以讓客戶的網(wǎng)站和網(wǎng)絡營銷和我們一樣獲得訂單和生意!一、static特點1.這樣的函數(shù)只能在本文件中被調(diào)用
2.在同–源程序中其他文件可以定義同名的函數(shù)
#includeusing namespace std;
//static的作用:1). 在函數(shù)體,一個被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。
//2). 在模塊內(nèi)(但在函數(shù)體外),一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個本地的全局變量。
//3). 在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那
class Std{public:
Std()//構(gòu)造函數(shù)
{ cout<<__func__<<":"<<__LINE__< cout<<__func__<<":"<<__LINE__< cout<<__func__<<":"<<__LINE__<this->val=val;
return;
}
int getval()
{return this->val;
}
static int getmyval()//static靜態(tài)變量的訪問接口
{return myval;
}
static int *myvaladdr()
{return &myval;
}
private:
int val;
static int myval;//靜態(tài)成員變量,類的成員,與對象無關
};
int Std::myval=123;//static成員變量使用前必須在類的外部聲明定義初始化
int main(int argc, char *argv[])
{Std obj;
obj.setval(10);
cout<
二.C中const關鍵字的用法1)修飾變量,變量是只讀變量,即變量只能初始化,不能被修改
eg:
const int val = 123;//初始化
val = 321;//error
2)const修飾指針
const int *p;//不能通過指針p修改p指向的內(nèi)容 等價:int const *p;
int * const p;//不能修改p的指向
const int * const p;//既不能通過指針p修改p指向的內(nèi)容,也不能修改p的指向
2.C++中const用法
1)const修飾成員變量:必須使用初始化列表初始化
例:
#includeusing namespace std;
class Demo{public:
Demo(int val=0,int val1=0) : val1(val1),val(val) //使用初始化列表對成員變量val val1初始化
{this->val = val;//賦值
//this->val1 = val1; //const成員是只讀的,只能初始化,不能修改
cout<< __func__<< ":"<< __LINE__<< endl;
}
~Demo()
{cout<< __func__<< ":"<< __LINE__<< endl;
}
public:
void setval(int val)
{this->val = val;
return ;
}
int getval()
{
return this->val;
}
int getval1()
{return this->val1;
}
private:
int val;
const int val1;//const成員變量
};
int main()
{Demo obj(123,321);
cout<< obj.getval1()<< endl;
return 0;
}
2)const修飾成員方法: 不能通過此方法修改對象
即:
const方法只能調(diào)用const方法
const方法不能調(diào)用非const方法
const方法可以修改static成員變量
例:
#includeusing namespace std;
class Demo{public:
Demo(int val=0,int val1=0) : val1(val1),val(val) //使用初始化列表對成員變量val val1初始化 重點:不能通過初始化列表對static成員變量初始化
{this->val = val;//賦值
//this->val1 = val1; //const成員是只讀的,只能初始化,不能修改
cout<< __func__<< ":"<< __LINE__<< endl;
}
~Demo()
{cout<< __func__<< ":"<< __LINE__<< endl;
}
public:
void setval(int val)
{this->val = val;
return ;
}
int getval() const //const成員方法:不能修改類對象
{//val++;//error
//setval(666);//error 原因:const方法不能調(diào)用非const方法,因為非const方法有可能修改類對象
getval1();//right 原因:const方法可以調(diào)用const方法
myval++;//right 原因:myval是static成員,不屬于對象
return this->val;
}
int getval1() const
{return this->val1;
}
private:
int val;
const int val1;//const成員變量
static int myval;
};
int Demo::myval = 123;
int main()
{Demo obj(123,321);
cout<< obj.getval1()<< endl;
return 0;
}
3)const修飾對象:表示對象是只讀,即對象不能被修改
const對象只能調(diào)用const方法
const對象也可以調(diào)用static方法
const對象不能調(diào)用非const方法
eg:
#includeusing namespace std;
class Demo{public:
Demo(int val=0,int val1=0) : val1(val1) //使用初始化列表對成員變量val val1初始化
{this->val = val;//賦值
//this->val1 = val1; //const成員是只讀的,只能初始化,不能修改
cout<< __func__<< ":"<< __LINE__<< endl;
}
~Demo()
{cout<< __func__<< ":"<< __LINE__<< endl;
}
public:
void setval(int val)
{this->val = val;
return ;
}
int getval() const //const成員方法:不能修改類對象
{//val++;//error
myval++;//right 原因:myval是static成員
return this->val;
}
int getval1() const
{return this->val1;
}
static int getmyval()
{return myval;
}
private:
int val;
const int val1;//const成員變量
static int myval;//static成員
};
int Demo::myval = 123;
int main()
{const Demo obj;//const對象
//obj.setval(666);//error obj是const對象,只能調(diào)用const方法
cout<< obj.getval()<< endl;//right const對象可以調(diào)用const方法
cout<< obj.getmyval()<< endl;//right getmyval()是static方法,是類的成員
return 0;
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧