zoukankan      html  css  js  c++  java
  • C++ 类的构造函数使用规则

    //类的构造函数使用规则
    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    using namespace std;
    
    class PointA{
    
    };
    
    class PointB{
    public:
        PointB(int _a, int _b, const char *pin/*in*/){
            x = _a;
            y = _b;
            remark = (char *)malloc(sizeof(char)*(strlen(pin) + 1));
            strcpy(remark, pin);
            cout << "我是自定义的有参构造函数4" << endl;
        }
    private:
        int x;
        int y;
        char *remark;
    };
    
    class PointC{
    public:
        PointC(PointC &pm){
            cout << "我是自定义的拷贝构造函数3" << endl;
            //修改拷贝构造函数
            x = pm.x;
            y = pm.y;
            //remark = pm.remark; 这句话错误
            //修改后的方案
            remark = (char *)malloc(sizeof(char)*(strlen(pm.remark) + 1));
            strcpy(remark, pm.remark);
        }
    private:
        int x;
        int y;
        char *remark;
    };
    
    void ProtectA(){
        PointA p1;//调用默认无参构造函数
        PointA p2=p1;//调用默认拷贝构造函数
        //结论①:当类中没有定义任何一个构造函数时,c++编译器会提供无参构造函数和拷贝构造函数
    
        //PointB p3; //报错: error C2512: “PointB”: 没有合适的默认构造函数可用
        PointB p4(3,3,"455");//调用自定义有参构造函数
        PointB p5 = p4;//调用默认拷贝构造函数
        //结论②:当类中定义了任意的非拷贝构造函数(无参,有参),c++编译器不会提供无参构造函数,
        //但是如果类中也没有定义任意的拷贝函数,那么c++编译器还是会提供默认拷贝构造函数
         
        //PointC p6; //报错   error C2512: “PointC”: 没有合适的默认构造函数可用
        //结论③:当类中定义了拷贝函数时,c++编译器不会提供默认的无参构造函数
    
        //结论④:默认拷贝构造函数只是类成员变量间的简单赋值(详情参考类的浅拷贝)
    }
    
    void main(){
        
    
        system("pause");
    }

    构造函数和析构函数调用顺序总结:

    构造函数与析构函数的调用顺序

    当类中有成员变量是其它类的对象时

    首先调用成员变量的构造函数

    调用顺序与声明顺序相同

    之后调用自身类的构造函数

    析构函数的调用顺序与对应的构造函数调用顺序相反

  • 相关阅读:
    Typora标题自动编号+设定快捷键技巧
    配置redis 4.0.11 集群
    学会使用 Mysql show processlist 排查问题
    Golang学习的方法和建议
    日志文件删除shell脚本
    运维趋势2019年总结,运维就是要做到"技多不压身"
    我的xshell配色方案,绿色/护眼/留存/备份
    对于api接口的爬虫,通常的解决方法
    maven 打包和构建的Linux命令(mvn)
    Istio的流量管理入门-charlieroro编写
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5607980.html
Copyright © 2011-2022 走看看