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

C++类与对象基础续

目录

1.static成员

2.友元

3.内部类

4.匿名对象

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


1.static成员

1. 用static修饰的成员变量叫静态成员变量,静态成员变量必须在类内声明,类外初始化;                2. 静态成员变量为类的所有对象共有,不属于某个具体对象,不存储在对象中,存放在静态区。

上面两种方式都是错误的,因为静态成员变量不属于某个具体对象,所以不走构造函数初始化列表,所以也不能在声明位置给缺省值初始化

 类内声明,类外初始化才是正确的。

静态成员变量不存放在对象中。

3. 静态成员变量也是类的成员,受public,protected,private访问限定符的限制。

4.用static修饰的成员函数叫静态成员函数,静态成员函数没有this指针。

5.所以静态成员函数只能访问静态成员变量,无法访问非静态成员变量,因为没有this指针。

6.而非静态成员函数可以访问静态成员变量和静态成员函数

7.突破类域可以访问静态成员(public的),可以通过 类名::静态成员 或者 对象.静态成员来访问静态成员变量和静态成员函数。

静态的对象只构造一次,且是在第一次运行到它时才构造。 

2.友元

1.友元提供了一种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类的声明前加一个friend,并且把友元声明放到类里面。

2.外部友元函数可以访问类的私有和保护成员,友元函数仅仅是一种声明,它不是类的成员函数。

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

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

5.友元类中的成员函数可以是另一个类的友元函数,都可以访问另一个类的私有和保护成员。

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

7.友元关系不能传递。

3.内部类

1.如果一个类定义在另一个类的内部,这个类就叫做内部类。内部类是一个独立的类,与定义在全局相比,它只是受外部类类域限制,和访问限定符限制,所以外部类定义的对象中不包含内部类

2.内部类默认是外部类的友元类。

3.内部类本质也是一种封装,当A类与B类紧密关联时,A类实现出来主要就是为了给B类使用,那么可以考虑把A类设计为B类的内部类,如果把A类放到private / protected位置,那么A类就是B类的专属内部类,其它地方就都用不了了。

内部类这个东西,C++中用的还是比较少的。

4.匿名对象

1. 用 类型(实参) 定义出来的对象叫做匿名对象,一般的 类型 对象名(实参) 定义出来的叫有名对象。

2. 匿名对象生命周期只在当前这一行,临时对象生命周期也是只在这一行,有名对象的生命周期是跟着对象走的,但是const可以延长临时对象和匿名对象的生命周期。

 

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

1. 现代编译器为了尽可能提高程序的效率,在不影响正确性的情况下,会尽可能减少在传参和传返回值的过程中可以省略的拷贝构造

2. 关于如何优化C++标准并没有严格规定,各个编译器会根据情况自行处理,当前主流的比较新的编译器会对一个表达式步骤中连续的拷贝进行合并优化,有些更新更激进的编译器还会进行跨行跨表达式的合并优化。

 

 

这些了解即可,直到编译器会进行优化就行了。 

http://www.xdnf.cn/news/4324.html

相关文章:

  • 15.命令模式:思考与解读
  • 毫米波雷达原理(最通俗的解释)
  • MATLAB程序演示与编程思路,相对导航,四个小车的形式,使用集中式扩展卡尔曼滤波(fullyCN-EKF)
  • go 编译报错:build constraints exclude all Go files
  • Python使用爬虫ip抓取热点新闻
  • autojspro怎么免费用
  • 【原创分享】魔音变声器内含超多语音包实时变声
  • C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化
  • 【Wandb】搜索框仅支持正则匹配,不接受“tags:“前缀查询
  • 知乎前端面试题及参考答案
  • 【计算机网络】TCP为什么可靠?解决了哪些问题?
  • 数字文明时代开源技术驱动的商业范式重构:基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的协同创新研究
  • GD32F470+CH395Q
  • Odoo 开发:揭秘表单视图中“添加行”按钮的出现条件
  • Netty 是一个基于 Java NIO 的高性能网络通信框架
  • 基于SSM实现的健身房系统功能实现一
  • C++复习
  • Linux进程间通信(上)(21)
  • Unity学习笔记二
  • Java 8 非对称加密代码示例
  • cpp学习笔记2--class
  • STL详解 - map和set
  • tinyrenderer笔记(Shader)
  • OpenCV进阶操作:角点检测
  • WebGIS架构中,各部分承担的角色
  • MySQL 8.0 单节点部署与一主两从架构搭建实战
  • C++ 重载
  • 双口万兆光纤网卡:高性能网络的基石与应用展望
  • 端口安全基本配置
  • AI数据分析中的伪需求场景:现状、挑战与突破路径