您的位置:首页 > 其它

static 静态成员

2016-05-18 22:48 274 查看
</pre>【static】<p></p><p>1.  静态局部对象</p><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><p>位于函数内的静态变量,在调用函数前就被创建并赋初值,在程序结束前都不会被撤销,在函数多次调用过程中持续存在并保持它的值。</p></blockquote><p>2. 静态类成员</p><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><p>static数据成员与类关联,独立于类的任意对象,类的全体对象共享static成员。</p><p>static数据成员必须在类定义体<span style="color:red">外部</span>定义且只定义一次,无需重复指定static保留字。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化</p><p><span style="color:red">因为</span><span style="color:red">static</span><span style="color:red">成员函数不是任何对象的组成部分,所以它没有</span><span style="color:red">this</span><span style="color:red">形参,不能被声明为</span><span style="color:red">const</span><span style="color:red">,也不能被声明为虚函数。类型可为该成员所属的类类型,非</span><span style="color:red">const</span><span style="color:red">成员只能为指针类型或引用。</span><span style="color:red">Const</span><span style="color:red">成员可用作默认实参。</span></p><p>可直接访问所属类的static成员,但不能直接使用非static成员。</p><p>static成员遵循正常公有/私有访问规则。</p><p>一般类的成员不能在类的定义体中初始化。但只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化。</p><p></p></blockquote><p>static数据成员与类关联,独立于类的任意对象,类的全体对象共享static成员。</p><p>static数据成员必须在类定义体<span style="color:red">外部</span>定义且只定义一次,无需重复指定static保留字。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化</p><p><span style="color:red">因为</span><span style="color:red">static</span><span style="color:red">成员函数不是任何对象的组成部分,所以它没有</span><span style="color:red">this</span><span style="color:red">形参,不能被声明为</span><span style="color:red">const</span><span style="color:red">,也不能被声明为虚函数。类型可为该成员所属的类类型,非</span><span style="color:red">const</span><span style="color:red">成员只能为指针类型或引用。</span><span style="color:red">Const</span><span style="color:red">成员可用作默认实参。</span></p><p>可直接访问所属类的static成员,但不能直接使用非static成员。</p><p>static成员遵循正常公有/私有访问规则。</p><p>一般类的成员不能在类的定义体中初始化。但只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化。</p><p></p><pre name="code" class="cpp">#include <iostream>
#include <string>

using namespace std;

class Account {
public:
void applyint(){
amount += amount * interestRate;
}
//静态成员函数
static double rate(){ //返回利息
return interestRate;
}
static void rate(double); //设置新利息
private:
string owner;
double amount;
//只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化
static const int period = 30;
double daily_tbl[period];
static double interestRate;
static double initRate();
};
//Account的每个对象有两个数据成员,没有与static数据成员对应的数据成员,全体对象共享interestRate。

//static数据成员必须在类定义体外部定义且只定义一次。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化
double Account::initRate() {
interestRate = 3.0;
}
double Account::interestRate = initRate();
//const int Account::period;
//类外部定义静态成员函数时,无需重复static保留字
void Account::rate(double newRate){
interestRate = newRate;
}

int main(){
Account ac1;
Account *ac2 = &ac1;
double rate;

//正常调用静态成员函数
rate = ac1.rate();
rate = ac2->rate();
//使用作用域操作符用类直接调用静态成员函数
Account::rate();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: