C++随记(十)--类与对象(2)

C++随记(十)--类与对象(2)

1、  类的构造函数

类的数据成员是不能在声明类的时候初始化的!因为类不是一个实体,是一种抽象类型,并不占存储空间。C++为我们提供了一个特殊的成员函数---类构造函数,专门用于构造新对象,来处理对象的初始化问题

这个成员函数不需要用户来调用它,而是在建立对象的时候自动执行。

一般构造函数都如下方式进行定义(名称与类名相同):

比如有一类 Country,那么其构造函数可以定义为:

Country::Country()

{

对成员赋初值的操作…

} 可以在类中定义,也可以在类外定义。但一定要在类中进行声明

还可以定义带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的传递给构造函数,以实现不同的初始化:

比如可以在类中声明两个不同的构造函数:

public:

Country(); //这个一般叫做默认构造函数,它不包含任何参数,一个类中只能有一个默认构造函数

Country( int area; int population);//通过函数重载来实现另一个构造函数

另外,在定义含参数的构造函数时,可以将它设置为参数初始化列表来对成员进行初始化。这种方法不在函数体内对数据成员进行初始化,而是在函数首部。

2、  析构函数

析构函数的作用与构造函数相反,析构函数并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。析构函数无返回值,无函数类型,无任何参数。不能被重载。所以一个类可以有多个构造函数但是有且只能有一个析构函数。

定义一般如下(函数名是类型名前面添一个 ~):

Country:: ~Country()

{

}

可以将其编写为不执行任何操作,函数会自动在合适的时候调用它。

当然也可以在其中编写最后一次使用对象之后想要执行的一些操作,比如输出啊什么的。

3、  构造函数和析构函数的顺序

有这么一句话: ”先构造的后析构,后构造的先析构”。大方向是对的但是也不全对,要具体分析

(1)定义的全局对象,它的构造函数在所有函数(包括main)执行之前调用。当main执行完毕,或执行exit函数时,才调用析构函数。

(2)如果调用的是局部自动对象,则建立对象时调用构造函数。在函数调用结束,对象释放时调用析构函数。

(3)如果在函数中调用静态(static)局部对象,则只在程序第一次调用此函数建立对象时调用构造函数一次,函数调用结束时,对象并不释放,也不调用析构函数。只在main函数或调用exit函数结束时,才调用析构函数。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

C++区别于其他语言的知识点总结

C++是博主的一门限选课,所使用的课本为谭浩强老师的《C++面向对象程序设计》(第二版),这本书内容全面,简单易懂,也强烈推荐给大家(尤其是初学者)。但对...

19910
来自专栏全沾开发(huā)

数组的遍历你都会用了,那Promise版本的呢

2254
来自专栏racaljk

clang -O3 for循环的LLVM IR

这里删去了用处不大的内容,只保留了关键的LLVM IR。通过分析可以看到,如果循环小于8 LLVM IR会使用vector,vector使用SIMD指令高效进行...

1043
来自专栏黑泽君的专栏

c语言基础学习06_函数

============================================================================= 涉及...

1462
来自专栏blog.csdn.net/LHWorld

python 使用小结

使用Python 已经一段时间了 ,现将python 中可能用到的技巧和一些知识点分享如下。

941
来自专栏java初学

final关键字

35812
来自专栏owent

C++ 新特性学习(四) — Bind和Function

木有错,这是C++,并且很方便地实现了委托 这就是传说中的绑定库和增强型的函数对象 接下来一个一个来

861
来自专栏xingoo, 一个梦想做发明家的程序员

复制控制---复制构造函数

复制构造函数 只有单个形参,而且该参数是对本类类型对象的引用。 主要用于: 1 根据另一个同类型的对象显示或隐式的初始化一个对象 string a = "abc...

1915
来自专栏Ryan Miao

java中String的相等比较

首先贴出测试用例: ? 1 package test; 2 3 import org.junit.Test; 4 5 /** 6 * Crea...

2786
来自专栏Hongten

java中静态变量和实例变量到底有什么区别_看了就知道啦

==================================================

663

扫码关注云+社区