static局部变量

static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化

这种对象一旦被创建,在程序结束前不会被撤销。在该函数被多次调用的过程中,静态局部对象会持续存在并保存它的值。

#include<iostream>
#include<string>
#include<assert.h>
using namespace std;
size_t count_calls()
{
static size_t ctr=;
return ++ctr;
} int main()
{
for(size_t i=; i!=; ++i)
cout<<count_calls()<<endl;
getchar();
return ;
}

本文地址:http://www.cnblogs.com/archimedes/p/cpp-static.html,转载请注明源地址。

static类成员

全局对象会破坏封装,对象需要支持特定类抽象的实现,类可以定义类静态成员,不像普通的数据成员,static数据成员独立于该类的任意对象而存在。

1、使用类的static成员的优点:

(1)static成员的名字在类的作用域中,因此可以避免与其他类的成员或全局对象的名字冲突;

(2)可以实施封装。static成员可以是私有成员,而全局对象不是;

(3)通过阅读程序容易看出static成员是与特定类关联的。

2、定义static成员

考虑一个银行账户类,每个账户的利率总是相同的,代码如下:

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

3、使用类的static成员

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

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

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

class Account{
public:
void applyint(){ amount+=amount*interestRate;}
};

static成员函数

类的成员函数定义在类的外面不需要重复static关键字

static函数没有this指针

static成员函数不能被声明为const,也不能声明为虚函数

static数据成员

static数据成员可以声明为任意类型,必须在类定义体的外部定义(正好一次),static数据成员不能通过类的构造函数初始化

1、特殊的整型const static成员

一般而言,类的static成员,不能在类的定义体中初始化,通常在定义时就初始化,但是一个例外是:只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化:

class Account{
public:
static double rate() {return interestRate;}
static void rate(double);
private:
static const int period=;
double daily_tbl[period];
static double interestRate;
};

2、static成员不是类对象的组成部分

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

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

非static成员不能用作默认的参数,因为它们的值不能独立于所属的对象而使用

C++中static类成员的更多相关文章

  1. static 类成员变量 和 static const类成员变量

    1.使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所 ...

  2. static类成员(变量和函数)

    0. 使用背景 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向 ...

  3. C++ static类成员,static类成员函数

    转载:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处 ...

  4. C++之static类成员,static类成员函数

    0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在.static类 ...

  5. 12.3——类作用域,构造函数,友元,static类成员

    类作用域: (1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符 来引用其他的成员. (2)函数的返回值不一定需要在类的作用域中,但是若是返回 ...

  6. const与static类成员

    const成员函数作用1. 不能修改类的成员变量,同时不能调用类的非const成员函数.(const成员函数中,this的类型是一个指向const类类型对象的const指针,const成员函数返回*t ...

  7. C++中static数据成员详解

        本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序 ...

  8. C++中的类成员指针

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  9. java中static修改成员变量和函数和其他使用

    一.通过static修饰的成员变量初始化只会初始化一次 //静态变量初始化只会初始化一次 public class zuishuai { public static void main(String[ ...

随机推荐

  1. 从头学Qt Quick(2)-- QML语法从一个简单的例子说起

    在上一篇文章中,我们对QtQuick做了简单的介绍,体验了使用QML语言构建一个UI的便捷.这里我们简要介绍一下QML的语法. QML将界面分成一些更小的元素,这些元素可以组成一个组件,QML语言描述 ...

  2. netbeans php安装、调试

    文件清单 jdk-8u45-windows-i586_8.0.450.14.1429092020.exe netbeans-8.0.2-php-windows.exe wampserver2.5-Ap ...

  3. Apache 配置多端口网站

    跳过安装步骤. 1. apache安装目录/conf/httpd.conf,如果你是采用wamp集成环境,那么在 wamp/bin/apache下. 2. 在httpd.conf中,找到 #LoadM ...

  4. HandlerMethodArgumentResolver数据绑定无效

    因项目中action参数过多,并且是一些通用的查询参数,所以准备进行对参数统一封装为Map对象,然后由action中传入service中进行处理,查询spring的资料发现可以通过实现HandlerM ...

  5. ECMAScript5新增对象语法糖getter和setter

    在新的ECMAScript5中新添加了两个语法糖,这两个语法糖是这样的. var obj = (function(){ var num = 10; return { get n(){ return n ...

  6. IMongoQuery的内部实现Query的用法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  7. Web压力测试 ApacheBench(ab)

    ApacheBench命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试ngin ...

  8. 【转载】让windows使用linux系统的命令

    转载自:http://blog.chinaunix.net/uid-28336510-id-3824903.html 1.下载GnuWin32,GnuWin32的安装文件(GetGnuWin32-0. ...

  9. 15套漂亮的 PSD 格式的图标,不一样的视觉效果

    在 Web 设计领域,图标发挥非常重要的作用,因为美丽的和创造性的图标集可以很容易地使网页设计更有吸引力.网页设计设计师专注于每一个领域的设计,包括颜色选择.图标.创造力.混色等.正确的选择图标可以使 ...

  10. 移动端页面使用单位的问题:关于px、百分比、em、rem开发中逐渐转换的问题记录

    开始写前端页面也有了快两年时间,从一开始的懵逼到现在的淡定,但是不能改变我还是一只小菜鸟的事实,平时遇到的一些问题都会记录在文件夹里,现在都整理一下大家一起分享自己平时也翻翻看看~ 不知道大家平时写的 ...