zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Serialize and Deserialize Binary Tree
    sliding window substring problem汇总贴
    10. Regular Expression Matching
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
    程序员如何写一份合格的简历?(附简历模版)
    9个提高代码运行效率的小技巧你知道几个?
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第六章 存储器层次结构
    24张图7000字详解计算机中的高速缓存
    《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
  • 原文地址:https://www.cnblogs.com/huochangjun/p/3092029.html
Copyright © 2011-2022 走看看