南宫28在线注册网站,wordpress 文章导出,西宁中小企业网站建设,企业网站怎么做中英文切换目录 前言
01 什么是构造函数呢#xff1f;
02 非构造函数初始化变量
03 构造函数初始化变量
04 带参数的构造函数。
最后的话 前言
我们继续学习 C 的面向对象编程#xff0c;本章主要是讲其中的 构造函数。
01 什么是构造函数呢#xff1f;
构造函数基本上是一种特…目录 前言
01 什么是构造函数呢
02 非构造函数初始化变量
03 构造函数初始化变量
04 带参数的构造函数。
最后的话 前言
我们继续学习 C 的面向对象编程本章主要是讲其中的 构造函数。
01 什么是构造函数呢
构造函数基本上是一种特殊类型的方法它在每次实例化对象时运行。
我们直接来看一个例子吧。
我们将要通过创建一个 Log类来深入了解这个知识点。
#include iostreamclass Log
{
public:int maxSize; int minSize;public:void print(){std::cout maxSize std::endl;std::cout minSize std::endl;}
};int main()
{Log log;log.print();return 0;
}
这个类有两个成员变量int maxSizeminSize用来描述 Log的最大最小数据量。然后创建一个 Log实例。再给它一个 Print 函数这样它就能够将它的位置信息输出到控制台。
运行这段代码结果是完全正常的没有任何问题。 然而你应该会注意到输出的值看起来像是随机的值。
这是因为当我们实例化 Log为它分配内存时我们实际上并没有初始化那个内存空间这意味着我们实际输出了那个内存空间里面原来的值。
这个 Print 函数虽然可以通过编译是它显示的并不是我们所期望的。因为它直接打印 X 和 Y但是它们都设置了看似随机的值这个不太一样。
看起来接下来的任务就是初始化内存了我们需要将它设置为 0。——我们期望在不指定一个值的情况下这个位置的值默认为 0。
02 非构造函数初始化变量
我需要一种方法当构造一个 Log的实例时我们可以把 X 和 Y 设为 0除非它们已经被指定了其它的值。
解决问题的方法之一是直接创建一个初始化的方法。
我们可以创建 Init 方法。 它是 void 类型的函数你可以看到它只是用来设置 maxSize和 minSize 的值为 0的。
现在我们能做的就是当 Log对象实例创建时可以调用这个 Init 方法。
调试运行程序可以看到 maxSize和 minSize被设为了0 看起来我们完成了我们的要求。
然而如果这样操作的话我们会额外编写相当多的代码。每当你想在代码中创建一个对象我们都需要调用 Init 函数这样当代码越来越多的时候写起来也会越来越麻烦。当构造对象时如果我们有办法直接运行这个初始化代码就好了。于是就有了构造函数。 03 构造函数初始化变量
构造函数是一种特殊类型的方法这是一种每次你构造一个对象时都会自动调用的方法。
我们像定义其它方法一样定义它。然而特殊的是它没有返回类型并且它的名字必须与类的名称相同。 写 Log的构造函数时首先输入类名 Log。 在这种情况下和之前一样让变量都等于0。删掉 Init 方法现在已经不再需要它了。 运行一下代码你会发现和前面用 Init 方法是一样的效果。—— Init 方法被构造函数取代了。 实际情况是如果你不指定构造函数其实仍旧有一个构造函数。只不过它是一个叫做默认构造函数的东西默认情况下已经为你准备好了只不过默认构造函数实际上什么都没做这和我们定义的这个构造函数函数体内完全空着是一样的效果。 像 Java 类的语言基本数据类型比如 int 和 float会自动初始化为0。但 C 的情况并非如此你必须手动初始化所有基本类型否则它们将被设置为原本该内存中值。
所以初始化是非常重要的。 04 带参数的构造函数。 没错其实你可以写很多的构造函数前提是它们有不同的参数。这其实和我之前写一些同名方法的操作是一样的。这个过程叫函数重载。可以这样说它们是 有相同的函数名但是有不同的参数的不同函数版本。
这里我加上 max 和 min 作为参数在函数体中然后把 max 和 min的值赋值给 maxSize和 minSixze。
我现在可以选择使用参数来构造 Log对象了。
运行程序之后可以看到 10 和 6 出现在控制台很棒哈。
构造函数讲的差不多了。
还有两点我需要提醒大家。
#include iostreamclass Log
{
public:int maxSize; int minSize;public:Log(int max,int min) {maxSize max;minSize min;}void print(){std::cout maxSize std::endl;std::cout minSize std::endl;}
};int main()
{Log log(10,6);log.print();return 0;
} 如果不实例化对象构造函数将不会运行所以如果你只使用一个类的静态方法它是不会运行。我们还没有讨论堆内存的分配问题当使用 new 关键字并创建一个对象实例时也会调用构造函数。 最后的话
这就是构造函数的基本使用了记住一句话就行它是一个特殊的方法在你创建类的实例时运行主要用途是初始化该类。当你创建一个新对象实例时构造函数确保你初始化的所有内存完成你所有需要做的设置。