类和对象
1. struct和class在定义类时最重要的区别:
c++类通过class的private、protected和public实现访问访问控制。struct和class定义类的区别是:struct缺省(没有定义访问控制)的数据成员和成员函数是public类型的,而在class中缺省的数据成员和成员函数是private类型的。
2.构造函数:
1)没有定义构造函数,则会自动生成一个缺省的构造函数;如果定义了任意一个构造函数,则不会生成缺省构造函数。构造函数的访问类型可以是多种,一般由一个公开构造函数。
2)拷贝构造函数为单参数,用于构造已有对象的副本,为本类的常对象的应用。如果没有定义,则会自动生成一个缺省拷贝构造函数。缺省拷贝构造函数为浅拷贝,即只完成指针值得拷贝,无法完成指针指向数据对象的拷贝;成员为指针时,需要自行定义深拷贝。
3)构造函数初始化列表,目的和意义:构造对象时同步构造内部对象;部分成员(常量与引用)只能初始化,不能赋值;部分成员(类的某个数据成员是另一个类的对象)如果赋值,将导致两次构造(在分配内存时,调用缺省构造函数构造,然后执行构造函数体内的赋值语句再次构造,效率不佳;若类没有缺省构造函数,将会导致问题)。成员初始化时按照成员定义的顺序定义,而不是初始化列表顺序;必须保持初始化列表和成员定义的顺序一致,但允许跳过部分成员,否则后续成员可能不能正确初始化。
3.析构函数
1) 没有返回类型,无参数。析构函数必须是公开的,可以由系统自动调用,也可以由程序其他部分调用,但两者原理不同。若为定义,则会自动产生一个缺省析构函数。
2)析构函数用于释放对象中动态分配内存的目标数据对象,缺省析构函数只能完成浅存的释放,深存(