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. oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)

    问题描述1:   C:\Users\Administrator>lsnrctl start LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Pr ...

  2. vs2010设置

    解决方案管理器文件自动定位:工具--选项--项目和解决方案--常规--在解决方案资源管理器中跟踪活动项(前打勾). VAssistX拼写错误的下划波浪线去掉:在VAssistX菜单栏->Visu ...

  3. EPANET源码中用到的几个简单C语言函数介绍三

    引自input2.C int  getfloat(char *s, double *y)/***---------------------------------------------------- ...

  4. 1117 新冲刺 day1

    项目需求确定 现阶段我们进行的项目是到店点餐系统.主要是开发手机端app为用户提供方便快捷的点餐服务.免去顾客到店后遇到因吃饭的人太多而找不到服务人员点餐的窘境.减少了服务人员因为忙碌而导致下单慢的问 ...

  5. 在做excel导出时如何将excel直接写在输出流中

    之前做excel导出时,我都是先将文件写在服务器上,然后再下载下来,后来发现原来可以直接将文件写在输出流里边. 下面是一个小demo: package com.huaqin.fcstrp.util; ...

  6. C#设计模式——观察者模式(Observer Pattern)1

    一.概述在软件设计工作中会存在对象之间的依赖关系,当某一对象发生变化时,所有依赖它的对象都需要得到通知.如果设计的不好,很容易造成对象之间的耦合度太高,难以应对变化.使用观察者模式可以降低对象之间的依 ...

  7. .Net反射机制分析和使用

    1..NET反射的概述 .NET反射是审查元数据并动态收集关于它的类型信息的能力. 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域.这些域在拥有相同应 ...

  8. Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现

    在一般的权限系统里面,可能经常会看到系统的黑名单或者白名单的拦截功能.在一般权限系统里面,常见的黑名单就是禁止用户在某些IP上登录系统,白名单就是允许用户只在某些IP上登录系统.本随笔主要介绍在我的权 ...

  9. sphinx配置文件sphinx.conf参数详细说明

    sphinx配置文件sphinx.conf参数详细说明 sphinx.conf各个参数详细说明 # # Sphinx configuration file sample # # WARNING! Wh ...

  10. table.appand(行数据) datagrid分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...