1. static成员变量与static成员函数使用注意点及原因。
2. 如何修改static成员变量的值。
3. 为什么会使用static数据成员呢?主要是因为可以节省空间和时间的浪费。例如CS游戏中你需要每一个人都知道当前状态下你的队友数目及敌人数目,大家可以共享这些数据,而如果人手一份数据,那必然会导致不必要的浪费。
1) static只被该类所有的成员共享—>类内声明,类外(.h\.cpp文件均可)定义
2) static只有1个地址—>只在声明(成员变量和函数均如此)时使用关键字
3) static成员变量的地址在编译时确定(普通变量的地址实例出现后确定)—>非静态成员函数可以调用静态成员和静态成员函数,但是静态成员函数只能调用静态变量
4) 两者区别只是地址单一还是可以多个—>static成员可以动态赋值
.h文件:
class SavingsAccount
{
public:
SavingsAccount(double a):savingsBalance(a)
{};
double calculateMonthlyInterest();
void print();
static void setAnnualInterestRate(double);
private:
static double annualInterestRate;
double savingsBalance;
};
.cpp文件:
#include<iostream>
using namespace std;
#include"SavingsAccount.h"
double SavingsAccount::calculateMonthlyInterest()
{
return savingsBalance*annualInterestRate/12.0;
}
void SavingsAccount::setAnnualInterestRate(double a )
{
annualInterestRate=a;
}
void SavingsAccount::print()
{
cout<<calculateMonthlyInterest()+savingsBalance<<"\n";
}
.cpp文件:
#include<iostream>
#include"SavingsAccount.h"
using namespace std;
double SavingsAccount::annualInterestRate=0.03;
int main()
{
SavingsAccount saver1(2000.00);
SavingsAccount saver2(3000.00);
saver2.print();
saver1.print();
double s;
cin>>s;
saver1.setAnnualInterestRate(s);
saver1.print();
saver2.print();
}
输出:
(其中0.04是自己输入的s的值)