class Account
{
public:
//成员函数不用调用作用域符就能直接使用静态成员
void calculate() { amount += amount*interseRate; }
static double rate()
{
//amount ++ ;错误 静态成员函数只能调用静态成员变量
return interseRate;
}
double getInterse()
{
return interseRate;
}
static void rate(double);
private:
//创建N个对象时,会存在N个owner amount,但只会存在一个interseRate
string owner;
double amount;
static double interseRate;
static constexpr double period = 2.0;//通常不会在类内部初始化,如果初始化要const类型的初始值
static double initRate()
{
//return amount;//错误 返回值也要与返回类型一致
return interseRate;
}
};
//可以在类内部也可以在类外部定义静态成员,在外部时不能重复static
//静态成员函数不予任何对象绑定在一起,不包含this指针,作为结果静态成员函数不能声明成const,
//不能在静态成员函数内使用this
void Account::rate(double newRate)
{
interseRate = newRate;
}
double Account::interseRate = initRate();
int main()
{
Account acc;
acc.rate(56);
cout << acc.getInterse() << endl;
//cout << acc.interseRate << endl;//错误 不能直接使用
Account *acc1 = new Account();
cout << acc1->getInterse() << endl;//所有对象共享静态变量
cout << Account::rate() << endl;//可以直接使用类的静态函数
/*
一般在程序中,由new产生的动态数据区放在堆区中,
函数内部的自动变量存放在栈区,自动变量一般会随着函数的退出而释放空间,
静态数据(即使是函数内部的静态局部变量)也存放在全局数据区中,
全局数据区的数据并不会因为函数的退出而释放空间。
*/
vector<int> vec{0,66,66,33,44,55,66,77,88};
auto num = count(vec.begin(), vec.end(), 66);
cout << num << endl;
sort(vec.begin(), vec.end());
sort(vec.begin(), vec.end());
for_each(vec.begin(), vec.end(), [](const int x) {cout << x << endl; });
return 0;
}