zoukankan      html  css  js  c++  java
  • 关于类拷贝造函数

        1默认拷贝构造函数:默认拷贝构造函数是构造函数的重载,它是依据对象来创建对象的,如Student a(b); 表示通过b对象来初始化a,那么这种对象创建活动为拷贝构造函数。如果对象实体是单纯的对象本体时,对象的拷贝构造与变量的拷贝并无两样,但是若对象本体不同于对象实体时,对象的拷贝就有了差别(如指针的拷贝)。如下:

    #include<iostream>
    using namespace std;
    class Student{
    char* pname;
    public:
    Student(char *pname = "NoName"){
    cout<<"成功构造"<<endl;
    this->pname = new char[strlen(pname)+1];
    strcpy(this->pname, pname);
    }
    ~Student(){
    delete[]pname;
    }
    };
    int main(){
    Student a("LiLy");
    Student b(a);
    return 0;
    }

    在默认拷贝构造时,pname指针也复制了,a对象与b对象的pname都指向同一个"Lily",此时在析构时候,"Lily"这块区域被删除2次,于是系统会出错。这是由于a对象本体与实体不一样所导致的。此时需要重写拷贝构造函数覆盖默认拷贝构造函数:

    Student (const Student &s){

         pname=new char[strlen(s.pname)+1];

        strcpy(pname,s,pname);

    }

    自定义的拷贝构造函数也是类名,他是构造函数的重载。拷贝构造函数必须使用对象的常引用。当自定义对象作为参数传递时,能用引用就尽量用引用,能用常量引用的就用常量引用。

  • 相关阅读:
    PHP(表单元素)
    PHP(一般标签介绍,标签特性,实体名称,绝对路径与相对路径)
    Oracle课程档案,第十七天
    Oracle课程档案,第十六天
    Oracle课程档案,第十四天
    Oracle课程档案,第十五天
    Oracle课程档案,第十三天
    Oracle课程档案,第十二天
    Oracle课程档案。第十一天
    [haoi2011]防线修建
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5089509.html
Copyright © 2011-2022 走看看