c++数据的共享与保护(第九章)

一.对象的生存期
对象(包括简单变量)都有诞生和消失的时刻.全局变量具有静态生存期(静态生存期与程序的运行期相同),而局部变量具有动态生存期(动态生存期为对象的声明开始点到该对象消亡处).
二.静态成员
1.静态数据成员用法:
静态数据成员的优势:
*静态数据成员没有进入程序的全局名字空间,不存在与其他全局名字冲突的可能性.
*可以实现信息隐藏.
注意点:静态成员不依托于类对象的存在而存在,在没有实体对象的时候我们访问静态数据成员需要
借助域操作符::
class Student
{
 ...
public:
 static int count;//静态变量
};
int Student::count=0;//初始化要在类外
int main()
{
Student stu;
cout<<"the number"<<Student::count<<endl;
cout<<"the number"<stu.count<<endl;//即有两种访问方式.
return 0;
}
2.静态函数成员
在上个例子中,如果静态成员不是公开的,则我们Student::count是不能的,但我们又不希望通过对象来访问,这样会很麻烦,所以有了成员函数来访问它.
基本用法:
class Student
{
private:
        static int count;
public:
 static GetCount(){return count;}
};
int Student::count=0;
int main()
{
cout<<"the number is "<<Student::GetCount()<<endl;
return 0;
}
运行结果:
the number is 0

三.常引用.常成员.常对象
1.常引用就是在引用时加一个const修饰符,保证引用访问时不更改该对象.
void compare(const int& x,const int& y);
2.常成员,就是常量可以定义为全局变量,但这样不适于代码移植,所以在类中定义常成员.
注意点:常量的初始化只能在初始化列表中.
class CircleCal
{
private:
 double radius;
 const double PI;
public:
 CircleCal(double r):PI(3.14)//注意常量初始化在初始化列表中
 {
  radius=r;
 }
}
3.常成员函数
对于对象的数据起保护作用,它不能更新对象的数据成员,也不能够调用任何非常成员函数.
(但如果该类中有指针,常成员函数可以修改指针指向的对象)
double GetR() const;
4.常对象
常对象就是在生存期中不可更改的对象.常对象只能调用常成员函数.
class CircleCal
{
private:
 double radius;
public:
 CircleCal(double r=0){radius=r;}
 double GetR() const{return radius;}
};
int main()
{
  const CircleCal R1(2.5);//定义常对象R1
  const CircleCal R2;
  cout<<"The Radius is "<<R1.GetR()<<endl;
  return 0;
}
运行结果:
The Radius is 2.5

(错误用法举例:)
class CircleCal
{
private:
 double radius;
public:
 CircleCal(double r=0){radius=r;}
 double GetR() const{return radius;}
 double GetR1() {return radius;}
};
int main()
{
  const CircleCal R1(2.5);//定义常对象R1,正确
  const CircleCal R2;//错误!必须初始化!
  cout<<"The Radius is "<<R1.GetR1()<<endl;//错误!R1不能调用非const成员函数
  cout<<"The Radius is "<<R1.GetR()<<endl;//调用常函数,正确
  return 0;
}


















猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/80441175