class vs struct
唯一的区别,就是默认访问权限不同。 class
的默认访问权限是private
, struct
的默认访问权限是 public
拷贝构造函数
调用时机:
当把一个已经存在的对象赋值给另一个新对象时,会调用拷贝构造函数。
当实参和形参都是对象,进行实参与形参的结合时,会调用拷贝构造函数。
1
2
3
4
5
6void f(A p);
void main(){
A a;
f(a);//a实参去初始化形参p,会调用copy构造函数
}当函数的返回值是对象,函数调用完成返回时,会调用拷贝构造函数。
赋值运算函数
默认情况下依然会采用浅拷贝的方式拷贝字符串。当两个对象被销毁时,同样会造成double free
的问题,因此缺省赋值运算符函数不再满足需求,此时需要显式定义赋值运算符函数.
1 | /* double free |
静态数据成员
静态数据成员和静态变量一样,当程序执行时,该成员已经存在,一直到程序结束,任 何该类对象都可对其进行访问,静态数据成员存储在全局/静态区,并不占据对象的存储空间。
静态数据成员不属于类的任何一个对象,所以不能在类内部初始化静态数据成员,必须在类的外部定义和初始化静态数据成员。
静态成员函数
静态成员函数的参数列表中不含有隐含的this
指针,静态成员函数内部不能使用非静态的成员变量和非静态的成员函数,只能调用静态数据成员和静态的成员函数。
const
成员函数
- 只能读取类数据成员,而不能修改之。
- 只能调用const成员函数,不能调用非const成员函数。