this
指针
- 定义: 非静态成员函数指向调用该函数的对象的指针
- 非静态成员函数隐含
this
指针参数
- 静态成员函数不针对某个对象,所以不包含this指针
静态成员变量&函数
- 静态成员变量&静态成员函数本质上是全局变量,与该类有关,但不与调用它的对象直接相关
- 即使没有创建对象,静态成员也存在,被所有对象共享
- 调用方法
- 类名::静态成员名
- 对象.静态成员
- 对象指针->静态成员
- 对象引用.静态成员
- 静态变量必须声明或初始化,否则链接时会报错
- 静态成员函数内不可使用非静态成员变量及非静态成员函数
#include <iostream>
using namespace std;
class Rectangle{
private:
int w,h;
static int TotalArea,TotalNum;
public:
Rectangle(int w_,int h_):w(w_),h(h_){
TotalNum++;
TotalArea+=w*h;
}
Rectangle(Rectangle &r){
w=r.w;
h=r.h;
TotalNum++;
TotalArea+=w*h;
}
~Rectangle(){
TotalNum--;
TotalArea-=w*h;
}
static void PrintTotal(){
cout<<TotalNum<<", "<<TotalArea<<endl;
}
};
int Rectangle::TotalNum; //必须对类的静态变量进行声明或初始化,
int Rectangle::TotalArea; //否则链接不通过
int main(){
Rectangle a(2,2),b(4,5);
Rectangle::PrintTotal();
a.PrintTotal(); //结果与对象a无关
return 0;
}
成员对象与封闭类
- 封闭类:包含成员对象(类)的类
- 初始化顺序:成员对象先构造,然后才是封闭类;成员对象构造顺序依照封闭类中成员对象声明顺序
- 析构顺序:封闭类先析构,然后是成员对象
常量成员对象&常量成员函数
- 常量成员对象:成员对象前面加
const
关键字,初始化后便不能改变值
- 常量对象只能调用常量成员函数
- 常量成员函数:成员函数后面加上
const
关键字,保证调用对象值在函数中不会被改变
- 常量成员函数内不能改变成员变量值(静态成员对象除外),不能调用同类非常量成员函数 (静态成员函数除外)
- 常引用:保证引用参数在函数运行中值不被改变
void func(const Stu &a)const{}
友元
- 分类: 友元函数、友元类
- 友元不属于对象成员,但能够访问对象的私有private成员&保护protected成员
- 友元关系不能传递,不能继承