pre{
line-height:1;
color:#1e1e1e;
background-color:#d2d2d2;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#1e1e1e;}
.operator?{color:#008000;font-weight:bold;}
类
? ? ??所有的类??都只有一个析构函数和赋值函数 ????????????但可以有多个构造函数 ? ??对于任意类,C++编译器会自动产生4个缺省的函数,分别是: ? ??????A()??//?缺省的无参构造函数???如果定义了任意一个构造函数,则此默认构造函数失效 ? ??????A(const?A?&a);?//?缺省的拷贝构造函数,即浅拷贝 ??????A&?operator=(const?A?&a)?;?//?缺省的赋值函数 ?????~A();缺省的析构函数 ? ?
按类型划分
?
1?默认构造函数
??A();?????????编译器产生的缺省构造函数 ?
2?拷贝构造函数
? ??构造函数参数只有一个,且参数类型为该类类型,则为拷贝构造函数。 ??如 A(A&) A(const?A&) A(A&,int?i=0)???//若其他参数都有默认值,则这个构造函数也是拷贝构造函数 ?
2.1?默认拷贝构造函数
??A(const?A?&a);???浅拷贝??普通的拷贝??即用a的数据对新对象简单的一一赋值 ?
2.2?深拷贝
?A(const?A&a)?;??重新动态分配空间 ?
什么时候发生调用拷贝函数?
?
1)?????????通过另一个对象进行初始化
A??a; A??b=a; A??c(a); ?
2)值传递
???Void?Fun(A?a){} ?
3)????????对象以值传递方式从函数返回
? A?Fun(){ A?a; Return?a; } ? ?
3?转换构造函数
??与拷贝构造函数类似,只有一个参数,但该参数不是该类的类型而是其它类型。 ? ? A(B?a){}; ? A?a; B?b a=b;???//??执行转换函数?A(b)??? ?
按限制访问划分
? ?
构造函数一般为公共类型,但是特殊情况下,使用私有类型。
? ? ? ?
1?单例模式
? ??私有化所有的构造函数 ? ? ??????代码;: ? //Singleton.h class?Singleton? { public: ???????static?Singleton*?GetInstance(); private: ???????Singleton()?{} ???????static?Singleton?*singleton; }; //Singleton.cpp Singleton*?Singleton::singleton?=?NULL; Singleton*?Singleton::GetInstance() { ???????if(singleton?==?NULL) ??????????????singleton?=?new?Singleton(); ???????return?singleton; } ?
2?私有化拷贝构造函数?预防默认拷贝
?
防止??初始化、值传递、返回值时发生拷贝构造函数
本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。
时间: 2024-10-06 22:00:43