首页 > 代码库 > 类?.xml

类?.xml

<style type="text/css"> 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;} </style>

?
?
??所有的类??都只有一个析构函数和赋值函数
????????????但可以有多个构造函数
?
??对于任意类,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?深拷贝

?Aconst?A&a)?;??重新动态分配空间
?

什么时候发生调用拷贝函数?

?

1)?????????通过另一个对象进行初始化

A??a;
A??b=a;
A??c(a);
?

2)值传递

???Void?Fun(A?a){}
?

3)????????对象以值传递方式从函数返回

?
A?Fun(){
A?a;
Return?a;
}
?
?

3?转换构造函数

??与拷贝构造函数类似,只有一个参数,但该参数不是该类的类型而是其它类型。
?
?
AB?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?私有化拷贝构造函数?预防默认拷贝

?

防止??初始化、值传递、返回值时发生拷贝构造函数

本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。

类?.xml