目录
拷贝(复制)构造函数
1、写法
类名::类名(类名 &形参名)
2、什么时候会调用
类对象作为函数形参的时候,调用该函数的时候会自动调用拷贝(复制)构造函数
3、什么时候不会调用
函数形参是普通的类型不是类类型、函数形参是类对象的引用、函数形参是类类型的指针。
4、分类
浅拷贝*
数据成员没有指针类型,可以不用写拷贝构造函数,走系统默认的拷贝构造函数。系统默认的拷贝构造函数一定是浅拷贝。
深拷贝*
数据类型有指针类型,自己再写个拷贝构造函数,并且要给指针开新空间,否则可能会出错。
5、其他
最好用引用作为函数形参,就不会调用拷贝构造函数,以及析构函数,可以避免函数被多次调用,影响效率。
eg:
this指针
类的成员函数是类创建的所有对象所共享的,为了区分,类函数用到自己的数据成员用this->成员名。可以解决成员函数的形参和类的数据成员重名问题。
例:
static(静态)数据成员
1、静态数据成员定义格式
static+数据类型+成员名;
2、静态数据成员初始化
类的静态数据成员在类外初始化,格式为:数据类型+类名+::(域运算符)+成员名=某个值
例如:(int Frog::count=0;)
3、访问格式
任意该类的对象名+.+静态变量名 或者 类名+::+静态变量名
4、作用
可以解决类的数据共享问题,因此把静态的数据成员放在public里
5、需要注意的地方
- 类的静态数据成员只属于某个类,不属于对象,对象只是有访问权限
- 静态成员函数没有this指针,并且只能访问类的静态成员
- 不创建对象也有静态成员(可调用) 用 类名+::+静态变量名 访问
错误示例:
正确示例:
普通对象数组和指针对象数组
对象数组:
和普通数组一样,数组名也是地址,只是存的是类类型的对象。 访问用 数组名[索引].成员 的方式。
指针对象数组:
存放的是每个对象的地址,初始化要用new开空间。访问用 数组名[索引]->成员 的方式。
const对象:
如果把一个对象指定为const,就是告诉编译器不要修改它。
const对象的定义:const 类名 对象名(参数);