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);

    }

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

  • 相关阅读:
    JS调试工具
    什么是Web Service?
    win7怎么安装消息队列 MSMQ
    死锁产生的原因及四个必要条件
    项目管理模式之如何去除SVN标记
    AJAX中的请求方式以及同步异步的区别
    敏捷软件开发模型--SCRUM
    堆和栈
    UI产品设计流程中的14个要点
    Android中dp和px之间进行转换
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5089509.html
Copyright © 2011-2022 走看看