C++对象之谜(封装篇)

您所在的位置:网站首页 福建华南女子职业技术学院怎么样 C++对象之谜(封装篇)

C++对象之谜(封装篇)

2023-04-15 18:01| 来源: 网络整理| 查看: 265

这篇博客简要记录下C++对象的相关内容,以便回顾时使用。

C++类的定义

我们使用C++定义一个矩形(Rectangle)类,它的基本属性有:长(width),宽(width), 对矩形的基本操作有:计算其周长(circumference), 计算其面积(area). 矩形类的定义如下:

class Rectangle { public: Rectangle(unsigned int width, unsigned int height) { m_width = width; m_height = height; }; // 构造函数 ~Rectangle() = default; // 析构函数 unsigned int get_circumference(); unsigned int get_area(); private: unsigned int m_width; // 矩形的宽 unsigned int m_height; // 矩形的高 }; unsigned int Rectangle::get_circumference() { return 2 * (m_width + m_height); } unsigned int Rectangle::get_area() { return m_width * m_height; }

一般来说,类由一系列数据以及对数据的一系列操作构成,我们希望隐藏数据,而提供对数据的操作。C++的public和private正起着这样的作用,使用public修饰的成员可以被外界访问,而使用private修饰的成员不可以被外界访问。

小提示:有的人习惯将类的成员变量名以m_开头,这样写看起来比较直观,但这也只是一种编程风格,我们使用了这样的风格,例如m_width和m_height.

对于类中的方法,可以将方法的具体实现直接写在类的声明中,例如这里的Rectangle(unsigned int width, unsigned int height); 也可以在类的声明外另写,不过此时需要在方法名的前面加上类的名称后跟两个冒号,例如这里的Rectangle::get_area, 表示这个方法是类Rectangle中的方法。

构造函数

如何根据类的声明创建一个对象(或者说这个类的一个实例)?这就是构造函数需要做的事情。构造函数是一个特殊的函数,在对象被创建时调用一次,通常用于初始化类中的数据成员或者做一些其它初始化的工作,它没有返回值,也没有返回值类型。它的声明由类名和参数列表构成:

ObjectName(type1 param1, type2 param2, ...);

例如这里的Rectangle(unsigned int width, unsigned int height).

可以定义多个构造函数,只要它们的参数列表不同,在调用时编译器会选择合适的构造函数。

析构函数

对象在销毁之前,会调用一次析构函数。因为有的对象可能占用了某些资源,例如占用了堆中的一部分空间(在销毁前应当释放空间)、打开了文件(在销毁前应当关闭文件)等等,或是完成其它的工作。它在对象被销毁前调用一次,它的声明通常由一个波浪号~和对象名构成,而且析构函数没有参数:

~ObjectName();

例如这里的~Rectangle(). 在C++中,如果某些特殊方法没有被定义,例如构造函数和析构函数,C++编译器会为这些特殊方法创建一个默认的版本。这里定义的矩形类很简单,在对象销毁前并不需要做额外的操作,因此可以直接使用默认的版本。为了使用C++编译器创建的默认版本,你可以什么都不写,或是像这里的写法:

~Rectangle() = default;

在后面加上 = default 从而告诉编译器我们将使用默认的版本。

创建第一个对象

好了,现在可以创建一个矩形对象。在此之前,我们更改下矩形类的实现,在调用构造函数和析构函数时,输出此函数被调用的语句:

// 其它部分保持不变 Rectangle(unsigned int width, unsigned int height) { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3