静态成员函数返回值问题
[code=C/C++][/code]
class Account
{
public:
static double rate(){return interestRate;}
static void rate(double);
private:
static const int period = 30;//static const 成员可以在类定义体中初始化
double daily_tbl[period];
double interestRate;
};
上述代码编译不过:
错误1 error C2597: 对非静态成员“Account::interestRate”的非法引用
把interestRate声明为static就可以通过:static double interestRate;
编译器是不是把static double rate()函数解释为返回值为static double的普通函数啊。。。
[解决办法]
静态成员函数只能操作静态数据成员, 想要操作非静态数据成员, 需要传入一个该类对象.
[解决办法]
class Account
{
public:
static double rate(){ return _rate; }
double money() { return _money; }
private:
static const double _rate;
double _money;
};
static const double Account::_rate = 0.03;// 编译器看到这句会为 Account::_rate 开辟内存
main()
{
cout << Account::rate() << endl; // _money 是 myacc的 myacc还不存在,可以访问就崩溃啦
Account myacc;
cout << myacc.money() << endl;
}
[解决办法]
学习C\C++要弄清什么是代码,什么是数据。
特别是学些C++,类是数据+代码的组合体。
数据的生存周期请参看下帖10楼的解释。
http://topic.csdn.net/u/20120209/12/c2ee3db1-4000-49c1-afcf-b40831d785d0.html
6楼的提问,你说的类的加载其实就是数据的加载。
所以类的生命周期同我上述帖子10楼的解释是一样的。
类中非静态数据成员为栈区数据。
静态成员为节表数据。
类自身的代码则是完全存在于code段中的,生命周期为进程加载那刻起直到进程结束。