189 8069 5689

构造函数与析构函数-创新互联

1、构造函数

创新互联建站是一家专业提供阳东企业网站建设,专注与成都网站设计、做网站、成都外贸网站建设公司H5页面制作、小程序制作等业务。10年已为阳东众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

 在我们定义一个类后,对其实例化,值都是随机的,然后我们自己在写函数对其赋值,感觉是多余的,

C++就提供了在实例化时就初始化的过程,就叫做构造函数;

 构造函数是特殊的公有成员函数,有一下特点:

 (1)、构造函数与类名相同;

 (2)、构造函数不写返回值;

 (3)、在实例化对象时,自动 必须 一次调用;

 (4)、可以重载(人生而不平等,这样理解);

 (5)、构造函数可以在类内定义,也可以在类外定义(通过作用域限定符::)

 (6)、C++会自动的给出默认的构造函数,要是自己写了,就不会再提供默认的构造函数了;

class Test{
public:
  Test(int d = 0) : data(d){}

这就是一个缺省的构造函数,存在时,不能再有无参的构造函数(不然是初始化为随机值还是默认值0);

2、构造函数的3个作用:

 (1)、构造对象,自动调用构造函数;

 (2)、初始化对象;

 (3)、类型转换

构造函数与析构函数

分析:t1是Test类型的,100是×××的;不同类型怎么能赋值呢?

 :C C++都是强类型语言,如果类型不一样,从某种角度上说不许赋值

int a;
double d = 12.34;

a = d;

类型不一样,不可能直接赋值,的借助中间临时变量来赋值;

现在来看t = 100;

100 必须的找到中间桥梁Test类型的,才能给Test类型的t赋值,里面是对应成员一一赋值;

刚好有个构造函数,并且有一个参数,通过构造函数,把×××100转化为Test类型,此时实例化了一个对象,刚好转换为类型一致,可以赋值。

此时还存在一个这样的问题:关键字explicit 显示的,作用:

 a、预防构造函数被隐式调用

 b、只能在构造函数前使用此关键字;

构造函数与析构函数

此时隐式赋值,不能调用显示构造函数,所以出错;

构造函数与析构函数

Test t = (Test)100;强制类型转换就是显示调用,explicit修饰的构造函数方可被调用!

现在看下面的问题:Test类型能否给int类型赋值?

构造函数与析构函数

两边类型不一致,并且在类的内部没有找到转换相同类型Test->int类型的函数(也就是说没有找到中间桥梁);所以出错!

必须的用到运算符重载(添加方法),下面这个叫做类型转换,————>不能有返回值;

添加在类内一个方法:

public:
    operator int(){
        return data;
    }

将Test类型转换为int,(有了这个方法就可以实现),从而找到桥梁,类型一致便可赋值;

原理: 借助了中间的无名变量空间(充当桥梁);

结果如下:

构造函数与析构函数

3、析构函数

~Test(){}

析构函数就是释放对象占用的空间,对任何函数死亡都是一样的,所以任何对象的析构只能用相同的方式进行,

析构函数无重载,无参,无返回,只有一个;(死是平等的)。

特点:

        (1)、析构函数与类名相同,但在前面加上'~',如:~Test(){}

        (2)、对象释放时,系统自动调用析构函数(可以是默认的)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:构造函数与析构函数-创新互联
标题网址:http://jkwzsj.com/article/cciddg.html

其他资讯