当前位置 : 主页 > 编程语言 > c语言 >

C++ ---->再谈构造函数(升级版)_02

来源:互联网 收集:自由互联 发布时间:2023-09-03
各位好友, 欢迎来到本期博客 !下面继续推进本章节模块下 ---静态成员 与友元函数 -----静态成员 --- static --- static 类成员称为 类的静态成员 ,用 static 修饰的成员函数, 称之为 静态

各位好友, 欢迎来到本期博客 !下面继续推进本章节模块下 --->静态成员 与友元函数

----->静态成员 --->static

--->static 类成员称为类的静态成员,用 static 修饰的成员函数, 称之为 静态成员函数。静态成员需要在类外进行初始化


---->static 特性 :>

1. 静态成员为所有类对象所共享, 不属于某一个具体的对象, 存在于静态区域;

2. 静态成员变量需要放在类外进行定义, 定义时不会添加 static 关键字类中只是声明

3. 类静态成员 即可用 类名 ::静态成员 或者 对象 . 静态成员 来访问;

4. 静态成员函数没有隐藏 this 指针, 不能访问任何非静态成员;

5. 静态成员也是类的成员, 受 public, protect, private 访问限定符 限制。


---->如下 :>

#include <iostrem>
using std::cout;
using std::endl;

class A
{
public:
  A()
  {
  	++_count;
  }
  A(const A& t)
  {
  	++_count;
  }
  ~A()
  {
  	--_count;
  }
  static int GetCount()
  {
  	return _count;
  }
private:
  static int _count;
};

int A :: _count = 0;
int main()
{
  cout << A::GetCount() << endl << endl;
  
  A a1, a2;
  A a3(a1);
  
  cout << A::GetCount() << endl << endl;
	return 0;
}


为了方便好友们, 有更好地观感体验, 与更好地理解 !现 附上有彩色的代码图样 :>

----->验证 与运行结果 :>

C++ ---->再谈构造函数(升级版)_02_静态特性


----->友元函数 ---->friend 关键字

---->友元 -->提供了一种突破封装的方式, 有时提供便捷。但是 友元函数会增加耦合度, 从而破坏 封装性,所以友元函数不宜过多使用。

友元 :>友元函数 ~~ 友元类 

(1)友元函数

前几期博文 --->赋值运算重载函数 -->已完成梳理!但是, 若将 operator<< 重载成成员函数 确实没有办法做到。因为 cout 的输出流对象 和this 指针总是会抢占第一个形参的参数位置, this 指针默认是第一个参数也就是左操作数。但是实际上 cout 需要的是第一个形参对象, 才能正常使用。因此 要将 operator<< 重载成全局函数。这会导致类外部没有办法访问成员, 此时引入 友元可进行解决, operator>> 同理 !

----->如下 :>没有突破访问限制的情况:>

C++ ---->再谈构造函数(升级版)_02_静态特性_02


----->如下 :>突破访问限制的情况:>

C++ ---->再谈构造函数(升级版)_02_静态函数_03


------>解析 :>

各位好友, 上述 类域中, 并没有 声明定义 打印函数 !但 最终打印出了正确的结果 !这就是 流操作符一种最基本的运用 !上述代码模块标注区域, 有一个 " _out " 是重定义类型变量 !

以上便是 简单演示, 用友元函数 --->突破访问限定符 !


----->说明 :>

1. 友元函数可以访问类的私有和保护成员, 但不是类的成员函数;

2. 友元函数不能用 const 来进行修饰;

3. 友元函数可以在类定义的任何地方进行声明, 不受类访问限定符限制;

4. 一个函数可以是多个类的友元函数;

5. 友元函数的调用 与普通函数的调用原理是相同的。


(2)友元类

----->友元类的所有成员函数都可以作为另一个类的友元函数,都可以访问 另一个类的非公有成员。

---->特性 :>

1. 友元关系是单向的, 不具有交换性;

2. 友元关系不能进行传递;

3.友元关系还不能继承(这在后续章节 --->会详加说明)


------>验证 :>

--->特性 一 -->

C++ ---->再谈构造函数(升级版)_02_友元函数_04


各位好友, 请注意 :>上述代码模块 标注区域 !由于在空间类 “Space”声明定义了 时间类 “Time” 是其友元。

因此, 在调用函数的过程中,时间类 “Time”  被允许访问空间类中的所有成员 ---->调试结果 -->显示 

但是, 在 类 “Space” 中却不被允许 访问时间类 “Time” ,感兴趣的的好友, 可以尝试运行一下, 会发现根本就编译不通过 !


---->下面转战验证 特性二:>

---->友元关系不能进行传递

C++ ---->再谈构造函数(升级版)_02_友元特性_05


各位好友, 请注意 标注区域 --->证明 友元函数不具有传递性 !


至此,本期模块, 已梳理完毕 !其实, 友元函数是一个特殊的存在 !虽然提供了某种程度上的便捷 !但是不符合规律性 !博主, 以后不到万不得已, 不会去使用它 !

希望, 本期模块, 能为好友们, 带来新的体验 与收获 !下一期, 继续推进 ---->再谈构造函数(升级版)---->匿名对象 ~~ 内部类

上一篇:PACS和DICOM的关系
下一篇:没有了
网友评论