static类成员

1、static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。

2、在成员申明前加上关键字static将成员设为static。static成员遵循正常的共有/私有访问规则。

class Account {
public:
    void applyint() {amount += amount * interestRate;}
    static double rate() {return interestRate;}
    static void rate(double);//set a new rate
private:
    sth::string owner;
    double amount;
    static double interestRate;
    static double initRate();
};

3、static成员函数可以定义在类的内部,也可以定义在类的外部定义,在类的外部定义static成员时,无须重复指定static保留字,该保留字只出现在类定义体内部的申明处:

void Account::rate(double newRate)
{
    interestRate = newRate;
}

4、可以通过作用域操作符从类直接调用static成员,或者通过对象、引用或者指向该类类型对象的指针间接调用。

Account ac1;
Account *ac2 = &ac1;
double rate;
rate = ac1.rate();
rate = ac2->rate();
rate = Account::rate();

5、像使用其他成员一样,类成员函数可以不用作用域操作符来引用类的static成员。

void applyint() {amount += amount * interestRate;}

6、因为static成员不是任何对象的组成部分,所以static成员函数不能被申明为const,也不能被申明为虚函数。

7、static数据成员必须在类定义体的外部定义。不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化。一般将static数据成员的定义放在包含类的非内联成员函数定义的文件中。 注意:尽管initRate时私有的,我们仍然可以使用该函数来初始化interestRate。像任意的其他成员定义一样,interestRate的定义是在类的作用域中,因此可以访问该类的私有成员。 

//定义和初始化静态成员
double Account::interestRate = inintRate();

8、特殊的const static数据成员可以在类的定义体中进行初始化,但仍必须在类的定义体之外进行定义,只是不必再指定初始值。

class Account {
public:
    static double rate() {return interestRate;}
    static void rate(double);//set a new rate
private:
    static const int period = 30;
    double daily_tb1[period]; //ok:period is constant expression
};

const int Account::period; //在类内部提供初始化式后,外部定义不用指定初始值

9、static数据成员的类型可以是该成员所属的类类型。非static成员被限定申明为其自身类对象的指针或引用:

class Bar {
public:
// ...
private: 
static Bar men1; // ok Bar *mem2; 
Bar *mem2; // ok Bar mem3; 
Bar mem3; // error
};

10、static数据成员可用作默认实参:

class Screen {
public:
    Screen& clear(char = bkground);
private:
    static const char bkground = ‘#’;
};

11、类模板的static成员,类模板可以像其他类一样申明static成员,static数据成员的定义必须指出它是类模板的成员,如:

template <class T>
class Foo {
public:
    static std::size_t count() {return ctr;}
    //其他接口成员
private:
    static sdt::size_t ctr;
    //其他成员
};

template <class T>
size_t Foo<T>::ctr = 0;


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值