c++ static类成员

使用类的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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:38
下一篇 2023年2月9日 下午6:39

相关推荐