• C++类中的特殊成员函数-------复制构造函数


      在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a;   在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复制构造函数,那么类将会调用默认的复制构造函数。下面的代码说明了这一情况,如果我们将类StringBad中的复制构造函数StringBad(StringBad &)去掉,那么count最后输出的结果会为复制(count为静态变量用来记录类StringBad的对象个数)。

    main.cpp

    #include <iostream>
    #include"StringBad.h"
    using namespace std;
    
    int main()
    {
        StringBad * src=new StringBad("src");
        StringBad srb("srb");
        StringBad srd=srb;
        delete src;
        return 0;
    }

    StringBad.h

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    class StringBad{
    public:
        static int count;
        char * name;
        StringBad(char * name);
        StringBad(StringBad &);
        ~StringBad();
    };

    StringBad.cpp

    #include"string.h"
    #include<iostream>
    #include<stdio.h>
    #include"StringBad.h"
    using namespace std;
    int StringBad::count=0;
    StringBad::StringBad(char * name){
        this->name=new char(strlen(name)+1);
        strcpy(this->name,name);
        count++;
        cout<<"创建新对象"<<(this->name)<<"后,还有"<<count<<"个对象"<<endl;
    }
    StringBad::~StringBad(){
        count--;
        cout<<"析构"<<(this->name)<<"之后,还有"<<count<<"个对象"<<endl;
    }
    StringBad::StringBad(StringBad & s)
    {
        count++;
        this->name=new char(strlen(s.name)+1);
        strcpy(this->name,s.name);
        cout<<"调用复制函数后,还有"<<count<<"个对象"<<endl;
    }
  • 相关阅读:
    Spring系列-JDBC实例
    postman-记录cookies信息
    根据URL获取参数值得出json结果集,对外给一个接口让别人调用
    linux 软硬链接
    第一个shell程序
    Argparse简易教程
    SQLAlchemy 教程 —— 基础入门篇
    人机对战初体验—四子棋游戏
    python的Flask 介绍
    python的项目结构
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/7196893.html
Copyright © 2020-2023  润新知