类和对象(下)

发布于:2024-05-09 ⋅ 阅读:(34) ⋅ 点赞:(0)

目录

1.全缺省和半缺省

2.初始化列表

3.友元函数

4.匿名函数

5.连续构造详解


🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉


1.全缺省和半缺省

全缺省:定义函数时,给形参全部初始化。如过调用时不初始化默认使用形参,如果初始化就使用初始化的值。

半缺省:形参部分初始化


2.初始化列表

初始化列表:每个对象中的成员初始化和定义的地方。

写法:

        :开始  ,分割(冒号开始逗号分割)

2.1何时使用

        如下👇👇👇

        

        MyQueue类创建对象,然后自动生成默认构造,内置类型不处理(具体看编译器器),自定义类型区调用它的默认构造,但如果我们把Satck类去掉呢?这时候就需要用初始化列表。

内置类型初始化有缺省值 用缺省值

【注意】

        1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)

        2. 类中包含以下成员,必须放在初始化列表位置进行初始化

                ·引用成员变量

                ·const成员变量

                ·自定义类型成员(且该类没有默认构造函数时)

        3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量, 一定会先使用初始化列表初始化。

        4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后 次序无关

分析:

        如题,先声明a2,所以先初始化a2,此时传给a2的值为a1,a1未确定,所以a2为随机值;

然后初始化a1,a的值为1传给a1,所以a1为1

exlicit关键词

用explicit修饰构造函数,将会禁止构造函数的隐式转换。


3.友元函数

        突破类域的限定访问符的方式        

        友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以 友元不宜多用。

        友元分为:友元函数和友元类

3.1友元函数

        友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。

说明:

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

        友元函数不能用const修饰

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

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

        友元函数的调用与普通函数的调用原理相同 

3.2友元类

如图👆👆👆

Date类可以访问Time的私有

3.3内部类

3.3.1嵌套类的大小

先看一题👇👇👇

解析:

        ·答案是4,在类A中,satic在数据段,不在类中,只有int h

        ·B天生就是A的友缘,B能访问A的数据

        ·A 和 B是俩平行的类,你是你,我是我,B嵌套在A,A里面没有B,只是受到类域限制。

                                                     调用B的时候只能 A::B b1


4.匿名函数

如下👇👇👇


5.连续构造详解


构造函数和拷贝构造可以简化

拷贝构造和拷贝构造可以简化

优化是编译器做的。

如图👆👆👆

要想返回aa需要拷贝构造临时对象,临时对象再拷贝构造给ret,

但编译器会优化这种连续构造,如右侧图,优化为直接构造

6.作业题

求1+2+3+...+n

计算日期到天数转换

日期差值

打印日期

累加天数


🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉 


last but not least,创作不易,望读者三连三连三连支持💖

重要的事情说三遍💖


网站公告

今日签到

点亮在社区的每一天
去签到