C++程序设计 | 第五章数据的共享与保护

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43145926/article/details/96725335

标识符的作用域和可见性
1 作用域
函数原型作用域
局部作用域
类作用域
命名空间作用域
2 可见性
命名空间作用域>类作用域>局部作用域

对象生存期
定义时未指定初值的基本类型静态生存期变量会被赋予0初始化,而对于动态生存期变量则不一定。

  • 静态生存期:对象的生存期与程序的运行期相同,只会初始化一次。
    static int i=5;
  • 动态生存期:局部生存期对象诞生于声明点,结束于声明所在的块执行完毕之时。每次进入函数都会初始化。

类的静态成员

  • 静态数据成员不属于任何一个对象,可以通过类名::标识符来进行访问。
  • 静态成员函数可以通过类名或者对象名来调用,而非静态成员函数只能通过对象名来调用。
  • 书上P158页,要是第二遍复习的时候不知道这里是啥就再吧代码例子敲一遍吧。

类的友元

  • 友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
  • 友元函数是在类中用关键字friend修饰的非成员函数。
  • 在它的函数体中可以通过对象名访问类的私有和保护成员。
  • 若A类是B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
  • 友元关系不能传递、是单项的、不能被继承的。
class Point{
public:
	...
	friend float dist(Point &p1, Point &p2);//友元函数声明
private:
	int x,y;
};

float dist(Point &p1, Point &p2){
	double x=p1.x-p2.x;
	...
	return static_cast<float>(sqrt(x*x+y*y));
}

int main()
{
...
cout<<dist(m1,m2)<<endl;
}

共享数据的保护
1 常对象

  • 常对象必须进行初始化,而且不能被更新。
  • 不能通过常对象调用普通的成员函数
class A{};
const A a(3,4);//a是常对象,以后不能被更新

const int n=10;//正确,用10对常量n进行初始化
n=20;//错误,不能对常对象赋值。

2 常成员函数

  • const 是函数类型的一个组成部分,因此在函数定义部分也要带const关键字
  • 常对象智能调用它的常成员函数,而不能调用其他成员函数。
  • 无论是否通过常对象调用函数,在常成员函数调用期间,目的对象都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数。
  • const可以用于函数重载,通过非const的对象调用该函数,两个重载的函数都可以与之匹配,这时编译器将选择最近的重载函数。
void print();
void print() const;

3 常数据成员

class A{
public:
	A(int i);
	void print();
private:
	const int a;
	static const int b;//静态常数据成员
};
const int A::b=10;//静态常数据成员在类外说明和初始化

A::A(int i)::a(i){}   //常数据成员只能通过初始化列表,来获取初值,不可以在{}初始化

常引用

  • 常引用所引用的对象不能被更新。
const Point &p1;

多文件结构和编译预处理命令

  • 命名空间作用域中的变量都默认是外部变量
  • 外部变量要被用时,需要加extern。

标准C++库

  • 输入输出类
  • 容器类与ADT(抽象数据类型)
  • 存储管理类
  • 算法
  • 错误处理
  • 运行环境支持

猜你喜欢

转载自blog.csdn.net/qq_43145926/article/details/96725335