1.this指针
1.1概念:
一个特殊的指针,存放当前对象的首地址
成员函数中都隐含着一个this;
成员只能由对象来调用,谁调用函数,this指针指向哪个对象
1.2指针原理
在调用成员时,编译器会用this调用成员。哪个对象调用成员函数,
this指针就指向哪个对象
1.3应用
1)区分属性和参数同名
当类中的属性和参数同名时,可以用this指向属性区分
2)链式调用
函数返回值时对象引用时,可以返回*this。可以用链式调用
2.static关键字
2.1静态局部变量
static修饰局部变量,所有这个类的所有对象共享,只有一份
第一次函数调用的时候,静态局部变量进行初始化。生命周期直到程序结束
2.2静态成员变量
static修饰的成员变量
注意事项:
1)在程序运行时创建,在程序运行结束时销毁
2)类中声明,类外初始化
3)类中所有对象共享,在对象创建之前就已经存在
4)公共权限瞎的静态成员可以用类::的方式访问
2.3静态函数
特点:
1)和类相关,在对象创建之前就可以调用
2)静态函数只能访问静态成员,不可以访问非静态成员 ,因为没有this指针
3)声明和定义分离的时候,static关键字只需要加在声明处
3.const关键字
3.1const修饰局部变量
通常情况下const修饰的局部变量表示常量,不允许进行修改
3.2const修饰成员变量
特点:
1)在运行时不允许修改
2)必须初始化,初始化可以通过初始化列表或者直接属性赋值,不能通过构造函数赋值。
3)一般在对象使用过程中,其数据成员成员不允许修改,可以用const来修饰
3.3const修饰成员变量
目的:实现数据保护,常含书只能访问数据,不能进行修改
特点:
1)可以访问非const成员变量,但是不能修改
2)不能访问非const函数
3.4const修饰对象
特点:
只允许访问const成员 ,不允许修改成员变量,不允许访问非const成员函数
const修饰对象可以写在类名前,也可以写在类名后
4.友元
原因:
类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。
如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的数据成员,
特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。
友元主要是用于运算符重载
4.1友元函数
概念:
友元函数是定义在类外部的普通函数,需要类中使用friend关键字进行说明,友元函数就可以访问类中的私有成员
特点:
1)友元函数不是类的成员,所有没有this指针。所以参数应该是对象的引用,用于访问类中成员
2)不是类中函数,所有不受类中权限修饰符的限制,可以写在任意位置
4.2友元类
当一个类是另一个类的友元类时,它就可以访问另一个类中所有的成员
5.运载符重载
在C++中,运算符的操作对象只能是基本数据类型。自定义类型是不能直接使用,所有运算重载对已有的运算符赋予多重含义。
使同一个运算符作用与不同类型数据做出不同的行为
运算符重载的本质是函数重载,它也是C++多态的一种体现
运算符重载增强了C++的可扩充性,使得C++代码更加直观、易读
C++提供的运算符重载机制,重载运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要重载的运算符共同组成。
和其他函数一样,重载运算符的函数也包括返回类型、参数列表及函数体
例如:
加号的友元函数重载
Rice operator +(Rice& r1,Rice& r2)
Rice:返回值
operator +:函数名
Rice& r1,Rice& r2 :两个对象类型的参数
加号的成员函数重载
成员函数隐含一个this指针。哪个对象调用函数,this指针指向谁
成员函数 Rice operator +(Rice& r2)
相当于 Rice operator +(Rice * this,Rice& r2)
r1+r2 操作时 this指向r1 第二个参数是r2