static 静态成员
2016-05-18 22:48
274 查看
</pre>【static】<p></p><p>1. 静态局部对象</p><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><p>位于函数内的静态变量,在调用函数前就被创建并赋初值,在程序结束前都不会被撤销,在函数多次调用过程中持续存在并保持它的值。</p></blockquote><p>2. 静态类成员</p><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><p>static数据成员与类关联,独立于类的任意对象,类的全体对象共享static成员。</p><p>static数据成员必须在类定义体<span style="color:red">外部</span>定义且只定义一次,无需重复指定static保留字。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化</p><p><span style="color:red">因为</span><span style="color:red">static</span><span style="color:red">成员函数不是任何对象的组成部分,所以它没有</span><span style="color:red">this</span><span style="color:red">形参,不能被声明为</span><span style="color:red">const</span><span style="color:red">,也不能被声明为虚函数。类型可为该成员所属的类类型,非</span><span style="color:red">const</span><span style="color:red">成员只能为指针类型或引用。</span><span style="color:red">Const</span><span style="color:red">成员可用作默认实参。</span></p><p>可直接访问所属类的static成员,但不能直接使用非static成员。</p><p>static成员遵循正常公有/私有访问规则。</p><p>一般类的成员不能在类的定义体中初始化。但只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化。</p><p></p></blockquote><p>static数据成员与类关联,独立于类的任意对象,类的全体对象共享static成员。</p><p>static数据成员必须在类定义体<span style="color:red">外部</span>定义且只定义一次,无需重复指定static保留字。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化</p><p><span style="color:red">因为</span><span style="color:red">static</span><span style="color:red">成员函数不是任何对象的组成部分,所以它没有</span><span style="color:red">this</span><span style="color:red">形参,不能被声明为</span><span style="color:red">const</span><span style="color:red">,也不能被声明为虚函数。类型可为该成员所属的类类型,非</span><span style="color:red">const</span><span style="color:red">成员只能为指针类型或引用。</span><span style="color:red">Const</span><span style="color:red">成员可用作默认实参。</span></p><p>可直接访问所属类的static成员,但不能直接使用非static成员。</p><p>static成员遵循正常公有/私有访问规则。</p><p>一般类的成员不能在类的定义体中初始化。但只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化。</p><p></p><pre name="code" class="cpp">#include <iostream> #include <string> using namespace std; class Account { public: void applyint(){ amount += amount * interestRate; } //静态成员函数 static double rate(){ //返回利息 return interestRate; } static void rate(double); //设置新利息 private: string owner; double amount; //只要初始化式为常量表达式,整型const static数据成员就可在类的定义体中初始化 static const int period = 30; double daily_tbl[period]; static double interestRate; static double initRate(); }; //Account的每个对象有两个数据成员,没有与static数据成员对应的数据成员,全体对象共享interestRate。 //static数据成员必须在类定义体外部定义且只定义一次。一旦成员名出现,成员定义就在类的作用域中,可直接使用static成员函数初始化 double Account::initRate() { interestRate = 3.0; } double Account::interestRate = initRate(); //const int Account::period; //类外部定义静态成员函数时,无需重复static保留字 void Account::rate(double newRate){ interestRate = newRate; } int main(){ Account ac1; Account *ac2 = &ac1; double rate; //正常调用静态成员函数 rate = ac1.rate(); rate = ac2->rate(); //使用作用域操作符用类直接调用静态成员函数 Account::rate(); return 0; }
相关文章推荐
- JVM学习
- Android 四种常用的监听器
- 基于AT91SAM9261EK的嵌入式Linux2.6.32+Yaffs2 根文件系统移植成功
- Java实现导出Excel文件
- CQL操作
- 最小费用最大流模板
- android native 与h5 交互技巧
- SQL SERVER 局部变量
- 第十三周
- JAVA设计模式(11):结构型-装饰模式(Decorator)
- Python处理多个客户端连接---派生服务器
- Collections中sort()和Arrays中的sort方法分析
- 14-利用SVD简化数据
- pycharm 注册
- LeetCode 101. Symmetric Tree
- Leetcode Everyday: 340. Longest Substring with At Most K Distinct Characters
- Java文件读写操作
- 二分排序法
- 基于FS4412嵌入式系统移植(1) 基本环境搭建
- HDU2191(多重背包)