class
1、C++中的 class与struct 一样,是一种复合数据类型
2、里面可以有变量用来表达属性,函数用来表示行为
3、在C++中的class与struct ,几乎没有任何区别
4、struct 中默认访问属性是public ,class 中默认的访问属性是 private
5、在C++中默认使用class,以示与C语言中的class 进行区分
class的构造函数
1、在创建对象时自动调用的函数,在整个对象的生命周期中一定会被调用一次,且只能被调用一次
2、在构造函数中负责对成员变量的初始化、分配资源、设置对象的初始状态
3、构造函数可以有多个版本,这些不同的版本之间会构成重载,创建对象时方法不同、给的参数不同会调用相应的构造函数,如果调用的构造函数不存在可能会造成编译错误
//无参构造
Student stu <=> Student* stup =new Student ;
Student stu(参数列表) <=>Student* stup =new Student(参数列表);
4、如果类中没有定义构造函数,编译器会自动生成一个无参构造
一旦定义了其它版本的构造函数,无参构造就不会再生成了,因此为了防止无参方式创建对象出错,在定义构造函数时,至少要实现两个
5、无参构造未必无参,在C++中函数可以有默认参数,如果有参构造全部设置了默认参数,就会和无参数构造有冲突,它们两个只能有一个存在
6、所谓的"编译器生成的某某函数"
"编译器生成的某某函数",不是真正意义上的函数,编译器作为指令的生成者,只要生成具有某些函数功能的指令即可,没有必要生成高级语言的语义上的函数
7、什么时候调用无参构造
a、Student stu <=> Student* stup =new Student ;
b、创建对象数组,每个对象都会调用一次无参构造
c、如果类A中有成员是类B,当执行完类A的构造函数后就会自动调用类B的无参构造
d、在类A中如何调用类B的有参构造
类A(参数列表):成员类B(参数列表)
{
...
}
8、类型转换构造函数
用一个数据给对象初始化,默认会自动调用构造函数,达到类型转换的效果
这种方式虽然使用方便,但也会包容一些错误存在,如果想让代码检查更为严格可以使用explicit关键字禁止隐式转换的方式调用构造函数
9、也可以实现自动类型转换构造函数(默认)
拷贝构造函数
1、是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆
class 类名
{
类名(类名& that)
{
对类成员挨个赋值
...
}
}
2、编译器会默认生成一个拷贝构造函数
编译生成的拷贝构造函数默认会逐字节复制类中的每一个成员
如果在类A中有类B成员,会在类A的拷贝构造中自动调用类B的拷贝构造
3、程序员可以自定义拷贝构造来取代默认的拷贝构造
a、拷贝构造只能有一个,不能重载
b、一旦程序员自定义的构造函数,编译器就不再生成
c、在自定义的拷贝构造中能通过编码来实现成员的复制
4、一般情况下编译器生成的拷贝构造完全够用,不要轻易自定义构造
5、什么情况下调用拷贝构造:
a、对象与对象赋值
b、用对象与函数传参
c、用对象当作返回值