c++类的静态成员

it2025-04-29  8

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;

}

最新回复(0)