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 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

史上最全的Python面向对象知识点疏理

源 / Python编程 文 / 朱小朱 面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类...

3765
来自专栏java达人

Java运行时多态性:继承和接口的实现

image.png Java是面向对象的语言,而运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Ja...

2225
来自专栏Java开发者杂谈

java finally深入探究

When---什么时候需要finally: 在jdk1.7之前,所有涉及到I/O的相关操作,我们都会用到finally,以保证流在最后的正常关闭。jdk1.7之...

3408
来自专栏技术碎碎念

python3 入门 (四) 类与继承

Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。...

35312
来自专栏猿人谷

Java初学总结

1.对象的比较    “==”操作符用于比较两个对象的内存地址值是否相等    equals() 方法用于比较两个对象的内容是否一致  如下列: 1 publ...

19210
来自专栏有趣的django

5.python函数

函数介绍 定义:  函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。 特性:减少重复代码、使程序变的可扩展、使程...

2646
来自专栏塔奇克马敲代码

第7章 类

1594
来自专栏python成长之路

理解Python中的类对象、实例对象、属性、方法

1243
来自专栏向治洪

传统多线程之前如何共享数据

几种方式 线程执行代码相同,使用同一Runnable对象,Runnable对象中有共享数据 线程执行代码不同,将共享数据封装在另一对象中(操作数据的方法也在该...

17710
来自专栏前端儿

JavaScript 按值传递 & 按引用传递

其次,对象的比较并非值的比较:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。     即使两个对象包含同样的属性和相同的值,它们也是不相...

1081

扫码关注云+社区