标签搜索

目 录CONTENT

文章目录

C和C++中static的用法及友元.md

小小城
2021-08-22 / 0 评论 / 0 点赞 / 4 阅读 / 1,442 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

C和C++中static的用法

@[toc]

一、C语言中

  1. static 修饰全局变量表示该变量只在本文件可用
  2. static修饰局部变量,使得局部变量的生命周期的延长至程序结束
  3. static修饰函数表示该函数只在本文件可用,不能被外部文件引用

二、C++中

  •  static修饰类中成员变量与类中普通成员变量的区别
静态成员变量普通成员变量
在类内声明时要加static修饰不用加static
在类外进行定义初始化在构造函数的初始化列表进行初始化
不属于某个具体的实例,为所有类对象所共享每个类对象都包含所有普通成员变量
可以通过类名::静态成员变量或对象名.静态成员变量名进行访问只能通过对象名.普通成员名进行访问
因为静态成员变量不属于某个具体实例,所以不影响类的大小(sizeof)影响
存储位置在静态区看在具体哪里创建
  •  static修饰类中成员函数与类中普通成员函数的区别
静态成员函数普通成员函数
不能访问普通成员变量,只能访问静态成员变量既能访问普通成员变量,还能访问静态成员变量
因为没有隐藏的this指针,所以不能用const修饰函数有this指针,可以根据情况用const修饰函数
可以通过类名::静态成员函数或对象名.静态成员函数名进行调用只能通过对象名.静态成员函数名进行调用
静态成员函数只能调用静态成员函数,不能调用非静态成员函数非静态成员函数既可以调用非静态成员函数也可以调用静态成员函数

三、友元

  •  (一)、 友元函数:
  1. 友元函数提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装。
  2. 问题:对于重载cout、cint

| 友元函数的特点|
|--|--|
| 必须重载为全局函数 |
|第一个参数必须为ostream&,第二个参数必须为类类型对象的引用
|必须有返回值,方便连续输入输出
|尽量不要在重载函数内部进行格式化操作(换行)
|其可以直接访问类的所有成员,包括私有成员
|友元函数不属于任何类,但要在类的内部任何地方进行声明,并加上friend关键字,不受任何类访问限定符限制,
|友元函数不能用const修饰,
|一个友元函数可以是多个类的友元函数

  •  (二)、友元类:
  • 友元类的特点:友元关系是单项的,不能继承,不能交换,不能传递
class Date
{
public:
	Date()
	{

	}
	Date(int year, int month, int day)
		:_year(year)
		,_month(month)
		,_day(day)
		//,count(10)//会报错
	{

	}
	void Show()
	{
		cout << _year << '-' << _month << '-' << _day << endl;
	}
	static int GetCount()
	{
		return count;
	}
private:
	int _year;
	int _month;
	int _day;
	static int count;//类内部进行声明生
};
int Date::count = 10;//类外进行定义初始化

int main()
{
	Date a;
	a.Show();
	Date b(2019, 10, 19);
	b.Show();
	cout << a.GetCount() << endl;//可以通过类名或对象名访问静态成员函数
	cout << Date::GetCount() << endl;
	system("pause");
	return 0;
}
0

评论区