类 .xml

时间:2021-02-13 15:03:51

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 私有化拷贝构造函数 预防默认拷贝

 

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

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