当前位置: 首页 > news >正文

C++【类和对象】(结束篇)

C++类和对象

  • 1.static成员
  • 2.友元
  • 3.内部类
  • 4.匿名对象
  • 5.对象拷贝时的编译器优化

1.static成员

  • 用static修饰的成员变量叫做静态成员变量,静态成员一定要在类外进行初始化。
  • 静态成员变量为所有类的共享,放入静态区,不属于某个具体对象,不放入对象中。
  • 用static修饰的成员函数叫做静态成员函数,静态成员函数没有this指针。
  • 静态成员函数访问其他静态成员函数,但是不可以访问其他非静态的,因为没有this指针。
  • 非静态成员函数可以任意访问其他静态成员函数和成员变量。
  • 静态成员也是类的成员,受public,protected,private访问限定符的限制。
  • 突破类域就可以访问静态成员函数的对象,通过类的名字::静态成员变量或者对象.静态成员变量来访问静态成员变量和静态成员函数。
  • 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。
#include<iostream>
using namespace std;
class A
{
public:
	A()
	{
		++_scount;
	}
	A(const A& t)
	{
		++_scount;
	}
	~A()
	{
		--_scount;
	}
	static int GetACount()
	{
		return _scount;
	}
private:
	// 类⾥⾯声明
	static int _scount;
};
// 类外⾯初始化
int A::_scount = 0;
int main()
{
	cout << A::GetACount() << endl;
	A a1, a2;
	A a3(a1);
	cout << A::GetACount() << endl;
	cout << a1.GetACount() << endl;
	return 0;
}

2.友元

  • 友元提供了⼀种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类 声明的前面加friend,并且把友元声明放到⼀个类的里面
  • 外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
  • ⼀个函数可以是多个类的友元函数
  • 友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。
  • 友元类的关系是单向的,不具有交换性,比如A类是B类的友元,但是B类不是A类的友元
  • 友元类关系不能传递,如果A是B的友元, B是C的友元,但是A不是C的友元。
  • 有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。

3.内部类

  • 如果⼀个类定义在另⼀个类的内部,这个内部类就叫做内部类。内部类是⼀个独⽴的类,跟定义在全局相比,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。
  • 内部类默认是外部类的友元类。
  • 内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。

4.匿名对象

  • ⽤ 类型(实参) 定义出来的对象叫做匿名对象,相⽐之前我们定义的 类型 对象名(实参) 定义出来的 叫有名对象
  • 匿名对象⽣命周期只在当前一行,⼀般临时定义⼀个对象当前用⼀下即可,就可以定义匿名对象。

5.对象拷贝时的编译器优化

  • 现代编译器会为了尽可能提高程序的效率,在不影响正确性的情况下会尽可能减少⼀些传参和传返回值的过程中可以省略的拷贝。
  • 如何优化C++标准并没有严格规定,各个编译器会根据情况自行处理。当前主流的相对新⼀点的编译器对于连续⼀个表达式步骤中的连续拷贝会进行合并优化,有些更新更"激进"的编译器还会进行跨行跨表达式的合并优化。

相关文章:

  • 游戏引擎学习第160天
  • GHCTF web方向题解
  • Next.js项目MindAI教程 - 第七章:社区功能实现
  • 73.HarmonyOS NEXT PicturePreviewImage组件深度剖析:高级功能扩展与性能优化策略(三)
  • 多条件下的免杀webshell
  • 虚拟化数据恢复—重装系统服务器崩了的数据恢复过程
  • Spring Boot对接twilio发送邮件信息
  • 我的博客素材
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(45)血海轮回阵 - Floyd-Warshall 多源最短路径
  • 02-Canvas-fabric.ActiveSelection
  • Rabit
  • Uniapp 开发 App 端上架用户隐私协议实现指南
  • Vuetify v-data-table footer文本适配中文
  • Redis基本命令手册——五大类型
  • 便捷搞定计算机名、IP 与 Mac 地址修改及网卡问题的软件
  • 【Erdas实验教程】015:哨兵二号卫星数据简介及下载方法
  • 将pdf或者word转换成base64格式
  • 设计心得——多态
  • 沐数科技数据开发岗笔试题2025
  • Unity开发中对象池设计与使用
  • 持续推动深入贯彻中央八项规定精神学习教育走深走实!上海市委党建工作领导小组会议举行
  • 在深化教育科技人才一体发展上打头阵、当尖兵!陈吉宁调研复旦大学
  • 海南乐城管理局原局长贾宁已赴省政协工作,曾从河南跨省任职
  • 墨海军训练舰在纽约撞桥,墨总统:对遇难者表示悲痛,将跟进调查
  • 殷墟出土鸮尊时隔50年首次聚首,北京新展“看·见殷商”
  • 2025全球城市科技传播能力指数出炉,上海位列第六