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

C和C++中static的用法

一、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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wolf鬼刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值