💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞
插入和输出流
//流插入不能写成成员函数,因为Date对象默认占用了第一个参数,就是做了左操作数 //所以写成全局,但是私有成员访问不了
//从左到右流入
返回类型为ostream
//方法一
//方法二
检查函数
const成员
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
//被const修饰的对象 和正常对象 都可以调用 const成员函数 //但是被const修饰的对象不可以直接调用成员函数因为const Date* 用 Date* 接收会发生权限的放大
取地址操作符重载
//这个是默认成员函数
初始化列表
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
注意事项
- 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
- 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时)
//特征:列表是对对象成员定义的地方
//对自定义类型会调用自己的默认构造,内置类型不处理—— 解决方法:在声明的时候内置类型赋予缺省值
//定义时不传参就叫默认构造
//当自定义类型无法自动调用构造函数时,
//当初始化列表中有引用类型时(因为形参随函数的销毁而销毁所以形参为引用类型且是变量)
//初适化列表不能完全代替函数体赋值
//A d = 2;优化直接构造
// const d1& aa3 = 2; ;临时变量有常性 d
explicit关建字
explicit关键字终止隐式转换
static成员
定义:声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化
//局部的静态变量 不会再main创建之前 就初始化
//可以定义静态变量属于类的每个对象共享
//定义 类名+变量名
//静态里不能访问(定义)非静态因为没有this指针
//静态声明不能给缺省值因为没有默认构造函数
//非静态能调用非静态
在类中不受类域和访问限定符的限制
注意事项
- 静态成员变量必须在类外定义,定义时不添加static
- 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区 关键字,类中只是声明
- 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
- 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
- 静态成员也是类的成员,受public、protected、private 访问限定符的限制
友元函数
友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。
说明:
友元函数可访问类的私有和保护成员,但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同
友元类
1.友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2.友元关系是单向的,不具有交换性。
//比如Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time
3.类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。 友元关系不能传递
4.如果B是A的友元,C是B的友元,则不能说明C时A的友元。 友元关系不能继承
内部类
概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。
特性:
- 内部类可以定义在外部类的public、protected、private都是可以的。
- 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
- sizeof(外部类)=外部类,和内部类没有任何关系//但是当定义外部类定义了内部类会包括在内
拷贝优化
//当定义和拷贝在一行时会优化,不在一行时不会优化
匿名对象