C++中static类成员
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#中使用System.Web.Mail.MailMessage类无法CC多人的问题
- jQuery Multi-TouchWipe / Multi-TouchZoom
- MFC ADO连接Oracle12c数据库 类库文件
- android 实现2张图片层叠效果
- 6.struts登陆页面的演示
- 命令删除visualstudio.com云端项目(TFS)
- hdu 1078 FatMouse and Cheese 记忆化dp
- 第六十五,html嵌入元素
- Qt5:QSystemTrayIcon类实现程序托盘图标
- App开发外包必须注意的四大骗局
- HTTP协议 状态码 telnet 笔记分享
- [LeetCode] Range Addition II 范围相加之二
- shell编程-邮件发送设置
- 【原创】KMP算法代码(C)
- shiro认证流程
- codeM美团编程大赛初赛B轮D题(考验你的数学思维!)
- C++ Exception机制
- jenkins 基本配置
- JQuery复习心得
- 如何用minitab检测一组数据是否服从正态分布
热门文章
- 单链表List的C实现
- 【网站开发】在新浪SAE上搭建一个博客
- 使用MyXls,出现访问被拒绝情况
- Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
- [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述
- Android学习笔记之横向二级菜单实现
- css3照片墙+曲线阴影
- 面向对象的JavaScript(一)命名空间
- 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
- [CLR via C#]13. 接口