• C++总结笔记(三)构造函数


    常见函数

    构造函数

    1. 构造函数和类同名,无返回值。
    2. 构造函数完成成员的初始化工作。
    3. 对象创建时,编译系统对对象分配内存空间,并自动调用该构造函数。
    4. 构造函数的种类以及特点:

    4.1   无参构造函数(默认构造参数)

    4.1.1          如果创建的一个类,没有写任何构造函数,则系统会自动生成一个不带参数的默认构造函数,函数为空,什么都不做。

    4.1.2          如果写了一个不带参数的构造函数,则系统不会再自动生成这样一个默认构造函数。

    4.2   一般构造函数(重载构造函数)

    4.2.1          一个类可以有多个一般构造函数,但是参数类型或者参数个数必须不同;

    4.3   拷贝构造函数

    4.3.1          拷贝构造函数的参数为类对象本身,用于根据一个已存在的对象复制出一个新的该类的对象。

    4.3.2          如果没有显示的写一个拷贝构造函数,系统会自动创建一个拷贝构造函数,

    4.3.3          深拷贝:自定义拷贝构造函数,可以防止编译器自动生成一个默认拷贝构造函数,当这个类对象发生复制过程时,会重新分配资源;

    4.3.4          浅拷贝:编译器自动生成的默认拷贝构造函数,该构造函数完成对象之间的位拷贝,又叫浅拷贝。浅拷贝没有重新分配资源,把对象的值完成复制给另外一个对象,这时同时指向了一块内存,如果前者对象中的一个指针成员变量delete释放掉了,那后者对象中的指针变量就变成了一个野指针,所以避免浅拷贝。

    4.4    等号运算符重载

    4.1.1   如果不自定重载等号,等号只能完成简单的拷贝工作。

    4.1.2   不属于构造函数;将等号右边的对象赋值给等号左边的对象,等号左右两边的对象必须都已经存在。

    #include<iostream>
    #include<string>
    using namespace std;

    class People
    {
     public:
      //定义了一个无参的构造函数,此时系统不会在自己创建一个默认构造函数;
      People()
      {
       name = "HCJ";
      }

      //一般构造函数
      People(string name)
      {
       this->name = name;
       cout<<"My name is "<<this->name<<endl;
      }

      People(string name,string sex)
      {
       this->name = name;
       this->sex = sex;
       cout<<"My name is "<<this->name<<"! I am "<<this->sex<<endl;
      }
      
      //拷贝构造函数
      People(const People &c)
      {
       name = c.name;
       sex = c.sex;
      }
      
      //重载等号
      People &operator=(const People &r)
      {
       //如果等号左边的就是等号右边的对象本身,就返回对象本身
       if(this == &r)
       {
        return *this;
       }
       
       this->name = name;
       this->sex = sex;

       return *this;
      }

      string name;
      string sex;
    };

    int main()
    {
     //默认构造函数
     People p;
     cout<<p.name<<endl;
       
     //一般构造函数
     string name = "huochangjun";
     string sex = "F";
     People pp(name);
     People ppp(name,sex);
     
     //拷贝构造函数
     People p1(ppp);
     cout<<"P1 name "<<p1.name<<endl;
     cout<<"P1 sex "<<p1.sex<<endl;
     
     //重载等号
     People p2;
     p2=p1;
     cout<<"P2 name "<<p2.name<<endl;
     cout<<"P2 sex "<<p2.sex<<endl;
     return 0;
    }

  • 相关阅读:
    Getting Started with MongoDB (MongoDB Shell Edition)
    Ioc
    BsonDocument
    Find or Query Data with C# Driver
    Insert Data with C# Driver
    Connect to MongoDB
    What's the difference between returning void and returning a Task?
    Import Example Dataset
    jQuery来源学习笔记:整体结构
    Word文件交换的电脑打开字体、排版变化的原因和解决方法!
  • 原文地址:https://www.cnblogs.com/huochangjun/p/3092029.html
Copyright © 2020-2023  润新知