has-a(组合关系)
在C++中,has-a关系是一种对象之间的组合关系,表示一个类的对象包含另一个类的对象作为其成员。
前向引用说明
在全局命名作用域中声明函数,可以避免递归调用时的函数重名问题。前向声明允许我们声明一个函数或类,而不立即定义它。
作用域
::全局命名作用域这样就可以调用和设计函数重名的全局要是,要不然就是递归调用
结果是
10
100
左值与右值
- 左值(Lvalue):指可定位的(locatable)值,可以作为赋值的左边变量。
- 右值(Rvalue):指可读取的(readable)值,通常作为赋值的右边表达式。
静态生存期
如果一个对象的生命周期与程序的执行期相同,那么它具有静态生存期。全局变量和静态变量就是具有静态生存期的例子。
匿名对象与右值
所有的匿名对象都是右值,因为它们没有名字,不能被再次引用。
这样不行
这样可以
这样不会改常量的值,只是引用常量的值
引用与数组
Vi不是数组只是在模仿数组的功能
对x修改并不会对修改数组里面的元素
像上图一样使用引用可以改变数组元素
this
指针
this
指针只在类的非静态成员函数中存在,指向调用成员函数的对象。静态成员函数中没有this
指针。
这种的字节大小还是12
this指针只存在于类的非静态成员函数
上面是非静态,下面是静态
const
修饰符
const
修饰的常量必须被初始化,且不能被修改。当const
修饰成员函数时,它保护的是对象本身,而不是成员函数的参数。
这个时候const修饰的是this指针
Const修饰的常量必须被初始化
类型转换与多态
C++支持多种类型转换操作符,包括:
const_cast
:用于去除const
属性。static_cast
:用于将一个类型安全地转换为相关类型。
友元函数
友元函数可以访问类的私有或保护成员,但它不是类的成员。友元关系是单向的,即一个类将另一个类的成员函数声明为友元,并不意味着另一个类也提供了互惠的访问权限。
简单理解就是只有朋友才可以进来调用(类外访问类内)
但是这种做法这只是单向的,只有我把你但朋友你却没有把我但朋友
类的共享
通过共享数据成员,可以实现类的共享效果。例如,一个员工类中的公司名可以作为共享成员,这样当一个员工的公司名改变时,所有员工的公司名都会改变。
这样可以实现类的共享(不为本类对象所特有,而为本类对象所共有)
既一个员工改变公司名,全部人的公司名都改变。
这种情况像可以直接调用
因为没调用构造函数所以要先进行赋值,要不然直接运行cout里面什么都没有