1.类和对象的基础知识
定义:类就可以看做是对相似事物的抽象
访问限定符:public,private,protect
封装性:
1)良好的封装能够减少耦合。
2)类内部的结构可以自由修改。
3)可以对成员进行更精确的控制。
4)隐藏实现细节
对象大小计算:只计算非静态成员变量(公有私有都算), 不算函数,和static变量,有内存对齐,空间换时间
2.四个默认成员函数,运算符重载
1)构造函数:初始化对象
无返回值
与类同名
实例化时自动调用
可重载
只要定义了构造函数,系统不会默认生成
无参构造函数,全缺省构造函数,都叫缺省构造函数
缺省构造函数只能有一个,可以半缺省
可在类外定义
2)拷贝构造函数:特殊的构造函数
拷贝构造是构造函数的重载
自己写拷贝构造时候参数要传引用,否则无穷递归
3)析构函数:清理工作
对象生命周期结束时自动调用
类名前面加~
不删除对象,而是做一些清理工作,关闭文件,释放动态开辟等
4)赋值运算符的重载
两个对象都存在时才会有赋值运算符重载
d1和d2两个日期类都存在,d1=d2是赋值运算符重载
Date d2 = d1;这是拷贝构造,因为d2不是已经存在的
运算符重载
不能重载的5个运算符: .* :: sz ?: .
3.隐含的this指针
非静态成员函数第一个参数都是this指针
public: void Display(Date *this)
cout<<this->_year;
main: Date d1; d1.Display(&d1);
4.运算符重载背后做的事情
两个日期类 d1 == d2
编译器会处理成 d1.operator==(&d1,d2);
定义:类就可以看做是对相似事物的抽象
访问限定符:public,private,protect
封装性:
1)良好的封装能够减少耦合。
2)类内部的结构可以自由修改。
3)可以对成员进行更精确的控制。
4)隐藏实现细节
对象大小计算:只计算非静态成员变量(公有私有都算), 不算函数,和static变量,有内存对齐,空间换时间
2.四个默认成员函数,运算符重载
1)构造函数:初始化对象
无返回值
与类同名
实例化时自动调用
可重载
只要定义了构造函数,系统不会默认生成
无参构造函数,全缺省构造函数,都叫缺省构造函数
缺省构造函数只能有一个,可以半缺省
可在类外定义
2)拷贝构造函数:特殊的构造函数
拷贝构造是构造函数的重载
自己写拷贝构造时候参数要传引用,否则无穷递归
3)析构函数:清理工作
对象生命周期结束时自动调用
类名前面加~
不删除对象,而是做一些清理工作,关闭文件,释放动态开辟等
4)赋值运算符的重载
两个对象都存在时才会有赋值运算符重载
d1和d2两个日期类都存在,d1=d2是赋值运算符重载
Date d2 = d1;这是拷贝构造,因为d2不是已经存在的
运算符重载
不能重载的5个运算符: .* :: sz ?: .
3.隐含的this指针
非静态成员函数第一个参数都是this指针
public: void Display(Date *this)
cout<<this->_year;
main: Date d1; d1.Display(&d1);
4.运算符重载背后做的事情
两个日期类 d1 == d2
编译器会处理成 d1.operator==(&d1,d2);