再探构造。

再探构造。 构造函数-2构造函数有函数体内赋值还有初始化列表。:_year(year),_month(month),_day(day),ref(x)每个成员变量只能在初始化列表出现一次。类型转换1.C支持内置类型转换成类类型需要有相关的内置类型构造函数A(inta):_a(a){}2.构造函数前加上explicit就不再支持隐式类型转换.explicitA(inta):_a(a){}3.类类型的对象之间也可以进行隐式转换,需要相应的构造函数.多参转化要用{}.#includeiostreamusingnamespacestd;classA{public:A(inta):_a(a);{}intGet()const{***}private:int_a1;int_a22;};classB{public:B(constAa):_b(a.Get()){}private:int_b1;};对象拷贝时的编译器优化现代编译器为了尽可能提高程序的效率,在不影响正确性的情况下尽可能减少传参和拷贝Linux下,编译使用g test.cpp -fno-elide-constructors的方式关闭构造相关的优化.友元友元提供一种突破类访问限定符封装的方式,友元分为:友元函数和友元类.在函数或类的声明前面加friend,并且把友元声明放到一个类里.外部友元函数可以访问类中的私有和保护成员.友元函数仅仅是声明,不是成员函数.友元函数可以在类定义的任何地方声明,不受类访问限定符限制,一个函数可以是多个类的友元函数.具有单向性,不能传递,不具有交换性.缺点:会增加耦合度,破环封装.classDate{public://友元声明放在类里friendostreamoperator(ostreamout,constDated);friendistreamoperator(istreamin,Dated);private:int_year;int_month;int_day;};ostreamoperator(ostreamout,constDated);istreamoperator(istreamin,Dated);内部类如果一个类定义在另一个类里面,为内部类.内部类是一个独立的类,只受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类.内部类默认是外部类的友元类.内部类本质也是一种封装.如果放到private/protected位置,那么A类就是B类的专属内部类,其他地方就用不了.