转载http://www.cnblogs.com/carbs/archive/2012/04/04/2431992.html

问题:我看的书上写的对私有部分的访问可以是公共部分的成员函数,也可以是友员函数,那么可以直接对私有部分的静态成员进行初始化吗? 回答:
1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。
2.静态成员不能在类定义里边初始化,只能在class body外初始化。
3.静态成员仍然遵循public,private,protected访问准则。
4.静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。
#include <iostream>
#include <string>
using namespace std; class Account {
public:
Account(string name, int money):owner(name), amount(money) { }
//Account(string name, int money, double rate):owner(name), amount(money), interestRate(rate) { } // 是错误的
~Account() { }
double applyint()
{
amount += amount * interestRate;
return amount;
}
//如果将applyint()声明为static double applyint()则错误,因为amount不是//静态成员
static double rate()
{
return interestRate; // 注意返回值
}
static void rate(double);
static double interestRate;//public,其他非成员可以访问
private:
string owner;
double amount;
//static double interestRate; // private, 成员和友元才可访问
static double initRate();
}; double Account::interestRate = 2.0; //正确的静态成员初始化
//double Account::interestRate = Account::initRate();//用静态成员函数对静态成员进行初始化,正确,因为private成员可以访问private成员,以上两种初始化只能选其一
//Account::interestRate = 3.0; //错误,不能通过编译,原因不明,按编译结果看,编译器将这个赋值语句当做对静态成员的初始化(因为编译器提醒少了类型:double)。但主函数中可以通过,见下
double Account::initRate()
{
return 2.0;
}
//所有的静态成员在类体外定义时都不再写static
void Account::rate(double newRate)
{
interestRate = newRate;
} int main ()
{
Account Yang("Yang", ); //interestRate = 2.0
cout << Yang.applyint() << endl;
cout << Yang.applyint() << endl;//注意两个结果不一样,因为amount第一次调用之后就变了。
Yang.rate(4.0);
cout << Yang.applyint() << endl;//interestRate = 4.0
cout << Account::interestRate << endl; //public静态成员
Account::interestRate = 3.0; //对应上面的赋值语句
cout << Yang.applyint() << endl;//interestRate = 3.0
Account Ning("Ning", );//interestRate = 3.0
cout << Ning.applyint() << endl;
Yang.interestRate = 6.0; // 也可以,并且还改了类中的静态成员值
Account Pei("Pei", );// interestRate=6.0
cout << Pei.applyint() << endl;
}
好了,就这些了!其中的数字只是为了数据的明显,没有实际意义!

c++中可以对类中私有成员中的静态变量初始化吗?的更多相关文章

  1. VC6.0中重载操作符函数无法访问类的私有成员

    整理日: 2015年03月18日 在 C++ 中,操作符(运算符)可以被重载以改写其实际操作.同时我们可以定义一个函数为类的朋友函数(friend function)以便使得这个函数能够访问类的私有成 ...

  2. obj-c中如何定义类的私有实例方法

    obj-c原生没有提供此项机制,不像java有private/protected/public方法的概念.obj-c中的@private以及类似的@protected和@public是用于修饰类的实例 ...

  3. 使用C#反射机制访问类的私有成员【转】

    首先我必须承认访问一个类的私有成员不是什么好做法.大家也都知道私有成员在外部是不能被访问的.而一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员访问,可以套用下面这种非常好的方式 ...

  4. C#箴言之用属性来访问类的私有成员

    在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问. ...

  5. Delphi 跨单元进入(访问)类的私有成员,protected ,private部分

    http://blog.sina.com.cn/s/blog_5f8861b60102v1nl.html Delphi 跨单元进入(访问)类的私有成员,protected ,private部分 (20 ...

  6. iOS中,在类的源文件(.m)中,@interface部分的作用?

      此@interface部分为类扩展(extension). 其被设计出来就是为了解决两个问题的 其一,定义类私有方法的地方. 其二,实现public readonly,private readwr ...

  7. 如何将OpenCV中的Mat类绑定为OpenGL中的纹理

    https://blog.csdn.net/TTTTzTTTT/article/details/53456324 如果要调用外接的USB摄像头获取图像通常使用OpenCV来调用,如何调用摄像头请参考本 ...

  8. java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

  9. 3.2 java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

随机推荐

  1. Oracle的sql语句中case关键字的用法 & 单双引号的使用

    关于sql中单引号和双引号的使用,来一点说明: 1. 查询列的别名如果含有汉字或者特殊字符(如以'_'开头),需要用双引号引起来.而且只能用双引号,单引号是不可以的. 2. 如果想让某列返回固定的值, ...

  2. MVC4 成员资格、 身份验证

    SimpleMembership,成员资格提供程序. 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板 ASP.NET MVC 4 互联网模板中添加一些新的 ...

  3. LR翻页脚本并在每页实现业务操作

    性能需求:在列表中删除后有记录,或对列表中的每条记录进行操作(如点击每条记录的“单号”进入订单详情页面,或在列表中对每条记录进行“启用”.“停止”操作) 举例:Vuser脚本模拟用户在订单列表中点击每 ...

  4. C#遍历Object各个属性含List泛型嵌套。

    同事遇到一个问题:在做手机app接口时,返回JSON格式,json里面的数据属性均是string类型,但不能出现NULL(手机端那边说处理很麻烦,哎).Model已经创建好了,而且model的每个属性 ...

  5. iocfont 网页图标字体以及使用方法

    在网页设计中使用图标字体(icon font)是件挺有新意的事情,使用图标字体能我们带来了一定的方便,比如在移动设备.Retina屏幕效果展示.兼容IE6/7浏览器以及能任意将图标放大缩小等,这些都是 ...

  6. F# 天生就是就异步和并行的料

    做模型开发免不了要使用异步和并行计算,尤其在多核CPU的今天,更是如此,F#恰逢其时,天生就具备这种能力,先看一个例子. open System open System.Drawing open Sy ...

  7. ORACLE SQL单行函数(二)【weber出品必属精品】

    11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...

  8. C#中子窗体获取父窗体中控件的内容

    今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用 ...

  9. IIS 7 支持10万并发请求

    原文链接:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error S ...

  10. hdu 5325 Crazy Bobo (树形dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Crazy Bobo Time Limit: 6000/3000 MS (Java ...