使用类的static成员的优点:
(1)static成员在类的作用域中,避免与其他作用域的名字冲突。
(2)可以实施封装。static成员可以是私有成员,它遵循正常的公有、私有访问规则。
(3)static成员与特定类关联,更能清晰的显示出程序的意图。
class Account
{
public:
// interface functions here
void applyint() { amount += amount * interestRate; }
static double rate() { return interestRate; }
static void rate(double); // sets a new rate
private:
std::string owner;
double amount;
static double interestRate;
static double initRate();
};
static数据成员独立于该类的所有对象,它是与类进行关联的。Account的所有对象都共享一个单独的interestRate对象。
static成员可以通过类的作用域操作符,或者通过对象、引用、指针间接调用。
rate = account.rate();
rate = accountPointer->rate();
rate == Account::rate();
类的成员函数可以不用作用域操作符来使用类的static成员。
static成员在类的外部定义时,无需重复static关键字。
void Account::rate(double newRate)
{
interestRate = newRate;
}
static成员函数没有this指针。
static成员函数不能声明为const。static成员函数不属于任何对象,所以它也不会修改对象的任何组成部分,因此也无需声明为const。
static成员函数不能声明为虚函数。
static数据成员必须在类定义体外部定义(在类定义体内部声明)。static数据成员不能通过类的构造函数初始化,而是在定义时初始化。
// define and initialize static class member
double Account::interestRate = initRate();
整形的const static成员比较特殊,可以在类的定义体内声明时进行初始化。
class Account
{
public:
static double rate() { return interestRate; }
static void rate(double); // sets a new rate
private:
static const int period = 30;
double daily_tbl[period]; // ok: period is constant expression
};
const static数据成员在类的定义体内初始化时,仍必须在类的定义体外进行定义,但不必再指定初始值。
// definition of static member with no initializer
// the initial value is specified inside the class definition
const int Account::period;
static数据成员的类型可以是该成员所属的类类型,普通成员则不可以。
class Bar
{
private:
static Bar mem; // ok
Bar mem1; // error
}
static数据成员可用作默认实参。
class Screen
{
public:
// bkground refers to the static member declared later in the class definition
Screen& clear(char = bkground);
private:
static const char bkground = ‘#’;
}
【学习资料】 《c++ primer》
原文链接: https://www.cnblogs.com/zhuyf87/archive/2013/02/23/2923312.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/78689
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!