温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

c++中如何使用构造函数

发布时间:2021-07-28 11:36:56 来源:亿速云 阅读:148 作者:Leah 栏目:大数据

本篇文章为大家展示了c++中如何使用构造函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


一、构造函数:

1、什么是构造函数?

关于这个构造函数,简单理解就是在一个类中,有一个函数,它的函数名称和类名同名,而且这个构造函数没有返回值类型的说法(  Test()这个函数就是构造函数了。):

#include <stdio.h>

class Test:
{
  public:
       Test()
       {
         printf("Test()\n");
       }
}
 

2、构造函数调用:

(1)一般情况下,构造函数在定义时自动被调用(主要作用就是自动去初始化类中的属性,这个属性通俗一点来说,就是我们所说的变量。而且这里的自动的意思,就是说当你创建了一个对象后,它就会自动调用构造函数,不用你再去main函数里面写构造函数了。):

#include <stdio.h>

class Test
{
public:
   Test()
   {
       printf("Test()\n");
   }
   
};

int main()
{
   Test t;      // 调用 Test()
   return 0;
}

 

演示结果如下:

root@txp-virtual-machine:/home/txp/c++# ./a.out
Test()
 

(2)一些特殊情况下,需要手工来调用构造函数(这个在下面带参数的构造函数里面会有一个案例分析)

二、带参数的构造函数:

(1)构造函数可以根据需要定义参数。

class Test
{
   public:
         Test(int v)
         {
         
         }
};

 

(2)一个类中可以存在多个重载的构造函数(什么重载函数,简单来说,可以同函数名,但是它的传参类型或者返回类型不同就是重载函数了。)下面来看一个具体带参构造函数案例:

#include <stdio.h>

class Test
{
private:
   int m_value;
public:
   Test()
   {
       printf("Test()\n");
       
       m_value = 0;
   }
   Test(int v)
   {
       printf("Test(int v), v = %d\n", v);
       
       m_value = v;
   }
   int getValue()
   {
       return m_value;
   }
};

int main()
{
   Test ta[3] = {Test(), Test(1), Test(2)};
   
   for(int i=0; i<3; i++)
   {
       printf("ta[%d].getValue() = %d\n", i , ta[i].getValue());
   }
   
   Test t = Test(100);
   
   printf("t.getValue() = %d\n", t.getValue());
   
   return 0;
}

 

演示结果如下:

root@txp-virtual-machine:/home/txp/c++# ./a.out
Test()
Test(int v), v = 1
Test(int v), v = 2
ta[0].getValue() = 0
ta[1].getValue() = 1
ta[2].getValue() = 2
Test(int v), v = 100
t.getValue() = 100

 

三、实战案例:

需求:开发一个数组类解决原生数组的安全性问题:

——提供函数获取数组长度

——提供函数获取数组元素

——提供函数设置数组元素
 

接下来我们先来写头文件IntArray.h,数组类就包含在里面:

#ifndef _INTARRAY_H_
#define _INTARRAY_H_

class IntArray
{
  private:
        int m_length;
        int* m_pointer;
  public:
        IntArray(int len);
        int length();
        bool get(int index, int& value);
        bool set(int index ,int value);
        void free();
};

#endif

 

然后接下来写IntArray.cpp,也就是类的方法具体实现了:

#include "IntArray.h"

IntArray::IntArray(int len)
{
   m_pointer = new int[len];
   
   for(int i=0; i<len; i++)
   {
       m_pointer[i] = 0;
   }
   
   m_length = len;
}

int IntArray::length()
{
   return m_length;
}

bool IntArray::get(int index, int& value)
{
   bool ret = (0 <= index) && (index < length());
   
   if( ret )
   {
       value = m_pointer[index];
   }
   
   return ret;
}

bool IntArray::set(int index, int value)
{
   bool ret = (0 <= index) && (index < length());
   
   if( ret )
   {
       m_pointer[index] = value;
   }
   
   return ret;
}

void IntArray::free()
{
   delete[]m_pointer;
}
 

最后就在main中来创建对象,来实现所需功能:

#include <stdio.h>
#include "IntArray.h"

int main()
{
   IntArray a(5);
   
   for(int i=0; i<a.length(); i++)
   {
       a.set(i, i + 1);
   }
   
   for(int i=0; i<a.length(); i++)
   {
       int value = 0;
       
       if( a.get(i, value) )
       {
           printf("a[%d] = %d\n", i, value);
       }
   }
   
   a.free();
   
   return 0;
}

 

最终演示结果:

root@txp-virtual-machine:/home/txp/c++# ./a.out
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5

 

小结:

——构造函数可以根据需要定义参数

——构造函数之间可以存在重载关系

——构造函数遵循C++中重载函数的规则

——对象定义时会触发构造函数的调用

——在一些情况下可以手动调用构造函数

 

上述内容就是c++中如何使用构造函数,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI