189 8069 5689

C++构造函数、析构函数-创新互联

目录

创新互联建站是一家专注于成都网站制作、成都网站建设与策划设计,茌平网站建设哪家好?创新互联建站做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:茌平等地区。茌平做网站价格咨询:028-86922220

一、构造函数

1、概念

2、作用

3、构造函数和其他概念的组合

4、拷贝构造函数

二、析构函数

1、概念

三、this指针


一、构造函数 1、概念

在类中,我们除了有函数之外,还有变量成员,为了方便我们实例化一个对象的时候给予该对象一些基本的数值,我们只能编写相应的初始化函数接口以供外界调用,这是实例化类时绝大多数需要做的工作,所以编译器为了统一化这个功能,衍生出了构造函数这个概念。构造函数的函数名跟类一致,且没有返回值这个概念,在每一个类的内部,都会有其特定的构造函数,如果没有自定义构造函数,编译器会帮我们生成一个空的构造函数,并在实例化某个对象的时候自动调用该构造函数。

2、作用

构造函数的作用特别简单,就是将我们类内的变量成员统一的进行有选择的初始化,方便我们的使用。

3、构造函数和其他概念的组合
  • 构造函数和默认参数:规定默认参数在构造函数的声明处实现;
  • 构造函数与函数重载:构造函数默认支持函数重载,与正常函数一样;
  • 构造函数的初始化列表:构造函数的初始化除了在函数体内部实现,还可以在初始化列表上实现。在函数体内部初始化,默认是在变量创建完之后进行赋值操作;而在初始化列表上进行初始化是默认在变量创建的过程进行初始化,这解决了用const修饰的变量成员的初始化问题。而且在后期类与类继承的时候,父类的构造函数也需要在子类的构造函数的初始化列表上指定。
class Student
{
public:
    Student();//构造函数
    Student(int a, int b = 0);//构造函数的函数重载与默认参数,注意默认参数写在函数定义处
    
private:
    int m_a;
    int m_b;
};


Student::Student(int a, int b):m_a(a),m_b(b)//构造参数的初始化列表,格式为():变量(值),变量(值)
{
    
}

Student::Student(int a, int b)//在函数体内初始化的构造函数
{
    m_a = a;
    m_b = b;
}
4、拷贝构造函数

是指同一个类实例化出来的对象去初始化另一个对象,说白了就是拿一个同样变量成员的对象内的内容去初始化另一个对象,如下:

class Student
{
public:
    Student();//构造函数
    Student(int a,int b);
    Student(Student &s);
    
private:
    int m_a;
    int m_b;
};

int main()
{
    Student s1(10,20);//通过正常的构造函数初始化对象
    Student s2(s1);//通过拷贝构造函数初始化对象

    
    return 0;
}

拷贝构造函数分为两类,分别是浅拷贝和深拷贝。

  • 浅拷贝:将原对象的变量存放的内容原封不动的拷贝给新对象;
  • 深拷贝:在浅拷贝的基础上,当遇到引用或者指针变量时,其会给新对象也开辟一块内存空间,并把原对象的指针或引用变量指向的内容拷贝到新对象开辟出来的内存空间。
  • 深拷贝相对浅拷贝更加安全和合理,它避免了两个实例化同时释放同一片空间的错误。
二、析构函数 1、概念

析构函数是跟构造函数一对出现的,在一个类里面,析构函数也是默认存在的,如果我们没有自定义,编译器会帮我们生成一个默认的析构函数,析构函数的函数名是在构造函数的基础上最前面加了~,即~类名(),这个函数会在一个对象结束时由编译器自动调用,帮助我们释放掉这个对象申请的一系列堆空间。

三、this指针

this指针是编译器自动生成的一个类实例化时指向自身对象的一个指针,大概的作用如下:

class Student
{
public:
    Student();//构造函数
    Student(int a,int b);//编译器会修改为Student(int a,int b,Student *this)
    Student(Student &s);
    
private:
    int m_a;
    int m_b;
};

int main()
{
    Student s1(10,20);//编译器其实会将其修改为Student s1(10, 20, &s1)
    Student s2(s1);//

    
    return 0;
}
Student::Student(int a, int b)//在函数体内初始化的构造函数
{
    this->m_a = a;//可以通过this指针访问对象的成员
    this->m_b = b;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:C++构造函数、析构函数-创新互联
本文URL:http://jkwzsj.com/article/jjhdg.html

其他资讯